在mongoosequery.exec()正确的error handling
我已经挖掘到Mongoose文档,但是我仍然无法find如何处理query.exec()
错误的信息。
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); });
当我通过不正确的userId,我得到Unhandled rejection CastError: Cast to ObjectId failed
错误打印到控制台。
我认为res.json(err)
后面跟着return
语句就足以正确处理这个错误,并防止它在控制台中显示,但事实并非如此。 我该怎么做呢?
随着callback:
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 });
目前你正在混合这两种风格。 select一种风格,并坚持下去。
只需对代码进行最less的更改:
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); });