我开始处理Web开发中的关键情况,直到现在,我才从未在代码回调中非常注意 err ,通常我所做的只是例如:< / p>
Model.find({'_id': someId}, function(err, doc) {
if(err) console.log(err)
else { // do business logic })
问题是我没有迷失在遇到错误的情况下,我想完整地说明为什么会抛出这些错误,以便为生产场景准备代码。
我看过一些文档,但是找不到为什么会引发错误的完整综述,这种资源是否存在?
答案 0 :(得分:1)
在mongodb操作期间,mongoose可能会引发错误,这可能存在许多情况。例子包括
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 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" }' }
}