Terradon
Terradon

Reputation: 858

How to catch errorcode in mongoose

Just playing around with my first login system, based on nodejs/express/mongoose/passport.

I have found more posts about this subject, but they all are slightly different then mine.

model:

module.exports = mongoose.model('User',{
id: String,
username: String,
password: String,
email: { type: String, unique: true }
});

For username a query is used to check if username is already taken. But that is not the way to do it. I have learned the database itself must check this. So that is why I am trying it out on the email field.

saving a new user:

// save the user
                    newUser.save(function(err) {
                        if (err){
                            console.log('Error in Saving user: '+err);  
                            //throw err; // server stops working immediately!!
                            return done(null, false, req.flash('message','DB error...'));
                        }
                        console.log('User Registration succesful');    
                        return done(null, newUser);
                    });

I added slashes before "throw err", because the node server stops immediately when trying to "throw". I copied/pasted the return done(...) part, which works well.

console error message:

 Error in Saving user: MongoError: insertDocument :: caused by :: 11000 
 E11000 duplicate key error index: mydb.users.$email_1  dup key: { : 
 "[email protected]" }

Problem: If any database error occures, I cannot assume it always will be a duplicate insert error, so I need to check on this, so I can show a message about duplicate emailadres or another usefull message.

I can't find anything like:

if(errorcode == E11000)
 message="duplicate email"
else
    message="an error occured bla bla"

Upvotes: 3

Views: 2562

Answers (1)

robertklep
robertklep

Reputation: 203514

The error code is stored in err.code, so you can check for it like this:

if (err) {
  if (err.code && err.code === 11000) {
    message = "duplicate email";
  } else {
    message = "an error occured bla bla";
  }
}

Upvotes: 7

Related Questions