我已经深入研究了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)
语句就足以正确处理错误并阻止它显示在控制台中,但事实并非如此。我该怎么做呢?
答案 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);
});