关于猫鼬方法的回调函数中的错误的文档

时间:2018-08-17 12:28:22

标签: javascript mongoose callback

我开始处理Web开发中的关键情况,直到现在,我才从未在代码回调中非常注意 err ,通常我所做的只是例如:< / p>

Model.find({'_id': someId}, function(err, doc) {
 if(err) console.log(err)
 else { // do business logic })

问题是我没有迷失在遇到错误的情况下,我想完整地说明为什么会抛出这些错误,以便为生产场景准备代码。

我看过一些文档,但是找不到为什么会引发错误的完整综述,这种资源是否存在?

1 个答案:

答案 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 }
})
  1. 在更新方案中,如果传递id来获取文档且更新无效(即无法转换为objectId)或文档不存在(即id匹配任何文档),则可能会出现错误。可以使用类似的方法来处理点1中的错误。

  2. 在进行需要处理错误的DELETECREATE时,也可能会出现其他错误。

最后可能需要处理错误,因为某种疏忽(例如语法)也可能引发错误。

在所有这些中,我想补充一下,猫鼬错误对象通常具有以下形式,如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" }' }
}