2013-09-25 4 views
7

मैं Sequelize ORM के रूप में उपयोग कर रहा हूं।प्राप्त करें .findOrCreate() त्रुटि

### 
    User model 
### 
User = exports.User = globals.sequelize.define "User", 
    username: globals.Sequelize.STRING 
    email: 
     type: globals.Sequelize.STRING 
     validate: 
      isEmail: true 
    hash:  globals.Sequelize.STRING 
    salt:  globals.Sequelize.STRING(512) 
    fname: globals.Sequelize.STRING 
    lname: globals.Sequelize.STRING 
    country: globals.Sequelize.STRING 

मैं उपयोगकर्ता बचत कर रहा हूँ:: यहाँ मेरे उपयोगकर्ता मॉडल है

globals.models.User.findOrCreate 
    username: "johny" 
    password: "pass" 
    email: "johny93[###]example.com" 
.success (user, created)-> 
    console.log user.values 
    res.send 200 
.error -> 
    console.log err # how to catch this? 
    res.send 502 

ईमेल मान्य है (ईमेल: "[email protected]"), सब कुछ अच्छा काम करता है। लेकिन अगर ईमेल सत्यापन में विफल रहता है (ऊपर दिए गए उदाहरण में), तो मुझे एक प्रविष्टि त्रुटि मिलती है। त्रुटि प्रकार कैसे पकड़ें? .error विधि कोई त्रुटि पैरामीटर नहीं मिल सकता है।

+0

आप sequelize के लिए एसक्यूएल लॉग पर बारी कर सकते हैं। यह आपको वह क्वेरी देगा जो आप चलाने की कोशिश कर रहे हैं जिससे त्रुटि उत्पन्न हो रही है। @Sriharsha भी सही है कि आपको कंसोल के लिए args स्ट्रिंग को निर्दिष्ट करने की आवश्यकता है। त्रुटि –

उत्तर

7

अनुक्रम त्रुटि त्रुटि समारोह में पैरामीटर के रूप में त्रुटि को पारित करेगा।

जावास्क्रिप्ट:

User.findOrCreate({username: "johny",password: "pass",email: "johny93[###]example.com"}) 
.success(function(user, created){ 
    console.log(user.values); 
    res.send(200); 
}) 
.error(function(err){ 
    console.log('Error occured' + err); 
}) 

CoffeScript:

globals.models.User.findOrCreate 
    username: "johny" 
    password: "pass" 
    email: "johny93[###]example.com" 
.success (user, created)-> 
    console.log user.values 
    res.send 200 
.error (error)-> 
    console.log error # how to catch this? 
    res.send 502 
+0

त्रुटि धन्यवाद, मैं समझा नहीं सकता कि यह मेरे लिए पहले क्यों नहीं काम किया था। उदाहरण के लिए त्रुटि के रूप में मुझे एक स्ट्रिंग मिलती है 'त्रुटि: ER_TRUNCATED_WRONG_VALUE_FOR_FIELD: गलत पूर्णांक मान:' 'कॉलम' कोर नम्बर 'पंक्ति 1' पर। मैं त्रुटि कोड और पंक्ति आईडी की तरह smth कैसे प्राप्त कर सकते हैं? मुझे उपयोगकर्ता के लिए त्रुटि दिखाने के लिए स्वचालित रूप से इनपुट त्रुटियों को संभालने की आवश्यकता है। या डीबी को मैन्युअल रूप से सम्मिलित करने से पहले इनपुट को मान्य करना बेहतर होगा? – f1nn

+0

क्या आप एक रेगेक्स खोज रहे हैं जो उस त्रुटि स्ट्रिंग से ER_TRUNCATED_WRONG_VALUE_FOR_FIELD और पंक्ति 1 को खींच देगा? – dankohn

13
User.findOrCreate({ 
    where: { 
    username: "johny", 
    password: "pass", 
    email: "johny93[###]example.com" 
    }, 
    defaults: { 
    //properties to be created 
    } 
}).then(function(user){ 
    var created = user[1]; 
    user = user[0]; 
    console.log(user.values); 
}).fail(function(err){ 
    console.log('Error occured', err); 
}); 

https://github.com/sequelize/sequelize/wiki/Upgrading-to-2.0

संपादित करें: के रूप में @Domi ने कहा, बेहतर तरीके से उपयोग करने के लिए 'फैल' है में की 'फिर'

User.findOrCreate({ 
    where: { 
    username: "johny", 
    password: "pass", 
    email: "johny93[###]example.com" 
    }, 
    defaults: { 
    //properties to be created 
    } 
}).spread(function(user, created){ 
    console.log(user.values); 
}).fail(function(err){ 
    console.log('Error occured', err); 
}); 
+1

आपके द्वारा साझा किए गए लिंक के अनुसार, यह कोड काम करता है, लेकिन यह कई तर्कों को वापस करने वाले तरीकों के साथ काम करने का अनुशंसित तरीका नहीं है। आप 'findOrCreate' के साथ '(उपयोगकर्ता और क्रिएटिवइनऑनएरे') के बजाय 'स्प्रेड (उपयोगकर्ता, बनाया गया'' का उपयोग कर सकते हैं, ताकि आप 'उपयोगकर्ता' को कॉल करने वाले सरणी के साथ काम कर सकें (लेकिन वास्तव में उपयोगकर्ता नहीं है)। – Domi

+2

@ डोमी अच्छा बिंदु, मैंने उत्तर – salexch

3

Sequelize 2.0 परिवर्तन वाक्य रचना और जगह अब होगा

User.findOrCreate({ 
    where: { 
    username: 'johny', 
    password: 'pass', 
    email: 'johny93[###]example.com' 
    } 
}).then(function (user) { 
    res.send(200); 
}).catch(function (err) { 
    console.log(err); 
    res.send(502); 
}); 
+2

को सीक्वेलिज़ 3.0 में संशोधित किया है, यह उपयोगकर्ता को अनुशंसा की जाती है। स्प्रेड() http://docs.sequelizejs.com/en/latest/api/model/#findorcreateoptions-promiseinstance-created – Kad

संबंधित मुद्दे