如何在mongoose中捕获错误代码

时间:2016-05-11 18:06:55

标签: node.js mongodb mongoose passport.js

只需使用我的第一个登录系统,基于nodejs / express / mongoose / passport。

我发现了关于这个主题的更多帖子,但它们都与我的略有不同。

模型:

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

对于用户名,查询用于检查是否已使用用户名。但这不是做到这一点的方法。我已经了解到数据库本身必须检查这个。 所以这就是我在电子邮件领域尝试的原因。

保存新用户:

// 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);
                    });

我在“throw err”之前添加了斜杠,因为节点服务器在尝试“抛出”时立即停止。 我复制/粘贴了返回完成(...)部分,效果很好。

控制台错误消息:

 Error in Saving user: MongoError: insertDocument :: caused by :: 11000 
 E11000 duplicate key error index: mydb.users.$email_1  dup key: { : 
 "sub@xxxxx.nl" }

问题: 如果发生任何数据库错误,我不能认为它总是会出现重复的插入错误,所以我需要检查一下,这样我就可以显示有关重复电子邮件或其他有用消息的消息。

我找不到类似的东西:

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

1 个答案:

答案 0 :(得分:3)

错误代码存储在err.code中,因此您可以这样检查:

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