我试图在异步中使用mongoose,大多数情况下一切正常......但是当我执行不返回结果的查找时,我的应用程序似乎挂起并最终超时。
下面是一些示例控制器代码,使用mongoose和async执行简单的id查找:
module.exports.find = function(req, res) {
async.waterfall([
function(next) {
SomeModel.findById(req.params.id, next);
},
function(someModel, next) {
if (!SomeModel) {
res.status(404).json({
success: false,
message: 'SomeModel not found'
});
} else {
res.json(SomeModel);
}
}
]);
};
如果找到记录,一切都会恢复正常,但对于不存在的id,似乎永远不会调用第二个异步步骤,最终整个请求超时。
那我在这里做错了什么?我怎样才能获得“发现”这样的信息。打电话的方法' next'即使没有找到记录?
答案 0 :(得分:0)
猫鼬正在抛出一个错误,你并没有抓住它。我应该提到的另一件事是你应该在最后的回调中做你的响应处理(你还没有定义)。
尝试这样的事情:
module.exports.find = function(req, res) {
async.waterfall([
function(next) {
SomeModel.findById(req.params.id, next);
}
], function(err, SomeModel){
// this is the final callback
if (err) {
// put error handling here
console.log(err)
}
if (!SomeModel) {
res.status(404).json({
success: false,
message: 'SomeModel not found'
});
} else {
res.json(SomeModel);
}
});
};
或者,您可以简化它以不使用瀑布:
module.exports.find = function(req, res) {
SomeModel.findById(req.params.id, function(err, SomeModel){
if (err) {
// put error handling here
console.log(err)
}
if (!SomeModel) {
res.status(404).json({
success: false,
message: 'SomeModel not found'
});
} else {
res.json(SomeModel);
}
});
};