如何在猫鼬中捕获错误代码
Posted
技术标签:
【中文标题】如何在猫鼬中捕获错误代码【英文标题】:How to catch errorcode in mongoose 【发布时间】:2016-09-07 07:19:55 【问题描述】:只是在玩我的第一个登录系统,基于 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”时会立即停止。 我复制/粘贴了 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"
【问题讨论】:
【参考方案1】:错误码存储在err.code
,所以你可以这样检查:
if (err)
if (err.code && err.code === 11000)
message = "duplicate email";
else
message = "an error occured bla bla";
【讨论】:
谢谢,那电子邮件本身呢?或者更好:看起来怎么错了? @Terradon tryerr.toJSON().op.email
(虽然我不知道这是否适用于所有版本的 MongoDB 驱动程序,但它似乎是内部的,而且 AFAIK 它完全没有记录)。 err
本身是 WriteError
的一个实例,FWIW。以上是关于如何在猫鼬中捕获错误代码的主要内容,如果未能解决你的问题,请参考以下文章