我开始处理网络开发中的关键场景,到目前为止,我从来没有过多关注代码回调中的 err ,通常我所做的只是:
Model.find({'_id': someId}, function(err, doc) {
if(err) console.log(err)
else { // do business logic })
问题是我没有遇到过会收到错误的情况,并且我想要完整说明为什么可能会抛出这些错误,以便我可以为生产场景准备代码。
我查看了一些文档,但找不到关于为什么可能抛出错误的完整评论,是否存在这样的资源?
最佳答案
在 mongoose 操作 mongodb 期间,有许多可能的情况会引发错误。示例包括
1.
在您的情况下:如果传递来获取文档的 id 无效(即无法转换为 objectId)。这可能是开发人员的错误,在这种情况下,他可能会将无效的 id 传递给该方法,因为通常不会让用户输入 id。为了覆盖所有可能的漏洞或充当防御性程序员,您可能需要通过返回 NOT FOUND
状态以及适当的消息来处理该实例中的错误,如下所示。然后,开发人员检查返回对象的状态或消息以采取适当的措施。
Model.find({'_id': someId}, function(err, doc) {
if(err) {
console.log(err);
return {
status: 'Not Found',
message: 'Possible Invalid ID or Document does not exist'
}
}else { // do other business logic }
})
在更新场景中,如果传递 id 来获取文档且更新无效(即无法转换为 objectId)或文档不存在(即 id 与任何文档匹配),则可能会出现错误。可以使用类似的方法来处理第 1 点中的错误。
执行
DELETE
或CREATE
时还可能出现其他错误,需要处理错误。
最后可能需要处理错误,因为某种疏忽(例如语法)也可能引发错误。
在所有这些中,我想补充一点, Mongoose 错误对象通常可能具有以下形式,如 mongoose issues on github 中引用的那样。 (由于重复键而导致创建错误的示例)。
{
[MongoError: insertDocument :: caused by :: 11000 E11000 duplicate key error
index: mydb-api.users.$email_1 dup key: { : "my@duplicate.com" }]
name: 'MongoError',
code: 11000,
err: 'insertDocument :: caused by :: 11000 E11000 duplicate key error index: mydb-api.users.$email_1 dup key: { : "my@duplicate.com" }' }
}
关于javascript - 关于 mongoose 方法的回调函数中的错误的文档,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51895479/