在mongoose query.exec()中正确的错误处理

时间:2017-01-27 14:58:06

标签: node.js mongoose

我已经深入研究了Mongoose文档,但我仍然无法找到我应该如何处理0中的错误的信息。

query.exec()

当我传递不正确的userId时,我在控制台上打印出var query = User.findOne({_id: userId}); var promise = query.exec(function(err) { if (err) { res.json(err); return; } }); promise.then(function(user) { res.json(user.name); }); 错误。

我认为Unhandled rejection CastError: Cast to ObjectId failed后跟res.json(err)语句就足以正确处理错误并阻止它显示在控制台中,但事实并非如此。我该怎么做呢?

2 个答案:

答案 0 :(得分:7)

使用回调:

var query = User.findOne({_id: userId});
query.exec(function (err) {
    if (err) {
        // handle error
        return;
    }
    // handle success
});

承诺:

var query = User.findOne({_id: userId});
query.exec().then(function () {
    // handle success
}).catch(function (err) {
    // handle error
});

目前,您正在混合这两种风格。选择一种风格并坚持下去。

答案 1 :(得分:1)

对代码的更改很少:

var query = User.findOne({_id: userId});

    var promise = query.exec(function(err) {
        if (err) {
            res.json(err);
            return Promise.reject(err); // Updated this line
        }
    });
    promise.then(function(user) {
        res.json(user.name);
    });

正确使用承诺:

User.findOne({_.id: userId})
  .then(function(user) {
    return res.json(user.name);
  })
  .catch(function(err) {
    return res.json(err);
  });