javascript - 关于 mongoose 方法的回调函数中的错误的文档

标签 javascript mongoose callback

我开始处理网络开发中的关键场景,到目前为止,我从来没有过多关注代码回调中的 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 点中的错误。

  • 执行DELETECREATE时还可能出现其他错误,需要处理错误。

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

    在所有这些中,我想补充一点, 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/

    相关文章:

    javascript - 在javascript中混合两种颜色 "naturally"

    javascript - templateField TextBox 的 getElementByID

    javascript - 如何捕获可编辑数据表单元格上的单击事件?

    javascript - 为什么我的 Google Maps API 回调在前面的内联脚本之前执行?

    javascript - 支持纬度/经度的世界地图

    arrays - 查询返回具有特定日期范围编号的文档,然后对它们进行排序,然后排序

    javascript - Mongoose 找到下一个对象

    javascript - 如何只在数据推送完成时才执行回调?

    javascript - 如何从自定义的 forEach 函数中获取返回值以在回调中使用?

    node.js - 500错误: Cast to ObjectId failed for value