Node.js 如何捕捉猫鼬中的错误代码

Node.js 如何捕捉猫鼬中的错误代码,node.js,mongodb,mongoose,passport.js,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 } }); 对于用户名,查询用于检查用户名是否已被使用。但这不是解决问题的办法。我知道

只是在玩我的第一个登录系统,基于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”之前添加了斜杠,因为节点服务器在尝试“throw”时会立即停止。 我复制/粘贴了returndone(…)部分,效果很好

控制台错误消息:

 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"

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

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

谢谢,那电子邮件本身呢?或者更好:看起来如何出错?@Terradon try
err.toJSON().op.email
(虽然我不知道这是否适用于所有版本的MongoDB驱动程序,但它似乎是内部的,而且可能完全没有文档记录)
err
本身就是,FWIW的一个实例。