Node.js 如何捕捉猫鼬中的错误代码
只是在玩我的第一个登录系统,基于nodejs/express/mongoose/passport 我找到了更多关于这个主题的帖子,但它们都和我的略有不同 型号: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 } }); 对于用户名,查询用于检查用户名是否已被使用。但这不是解决问题的办法。我知道
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的一个实例。