get .findOrCreate() error
14,022
Solution 1
sequelize will pass the error as the paramater to the error function.
JavaScript:
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
Solution 2
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
EDIT: as @Domi pointed out, better way is to use 'spread' instead of 'then'
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);
});
Solution 3
Sequelize 2.0 changes syntax and would now be
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);
});
Author by
f1nn
Updated on August 04, 2022Comments
-
f1nn almost 2 years
I'm using
Sequelize
as ORM. Here's my user model:### 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
I'm saving user:
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
If email is valid (email: "[email protected]"), everything works great. But if email fails validation (as in the example above), I get an insertion error. How to catch error type?
.error
method can't get any error parameters. -
f1nn over 10 yearsthank you, I can't explain why it had not worked for me before. For example as error I get a string
Error: ER_TRUNCATED_WRONG_VALUE_FOR_FIELD: Incorrect integer value: '' for column 'coreNumber' at row 1
. How can I get smth like error code and row id? I need this to handle input errors automatically to show error for user. Or will it be better to validate input before insertion to DB manually? -
Dan Kohn over 10 yearsAre you looking for a regex that will pull ER_TRUNCATED_WRONG_VALUE_FOR_FIELD and row 1 out of that error string?
-
Domi over 9 yearsAccording to the link you shared, this code works, but it's not the recommended way to work with methods that return multiple arguments. You can use
spread(user, created)
instead ofthen(userAndCreatedInOneArray)
withfindOrCreate
, to save you working with the array you calluser
(but is really not the user). -
Kad about 8 yearsIn Sequelize 3.0, it is recommended to user .spread() docs.sequelizejs.com/en/latest/api/model/…