在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); });