如何在猫鼬中捕获错误代码

How to catch errorcode in mongoose

只是玩弄我的第一个登录系统,基于 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" 时立即停止。 我 copied/pasted return done(...) 部分,效果很好。

控制台错误信息:

 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";
  }
}