Node.js删除请求
问题描述:
我有一个node.js应用程序,使用Express进行路由,并使用Mongoose进行数据库访问。Node.js删除请求
我有这个HTTP删除请求,删除数据库中的条目,如果满足某些要求。
.delete(function (req, res) {
Movie.findOne({_id: req.params.id
}, function (err, movie) {
if (err)
res.send(err);
for (var i = 0, len = movie.actors.length; i < len; i++) {
if (movie.actors[i].actor == "Chuck Norris"){
res.status(403).send({ message: 'Cannot delete Chuck Norris' });
}
else {
Movie.remove({_id: req.params.id
}, function (err, movie) {
if (err)
res.send(err);
res.json({message: 'Movie deleted'});
});
}
}
});
});
如果我发送一个HTTP与胶片的ID删除,它会检查在演员名单,如果查克·诺里斯是在电影,我会阻止删除,如果他是存在的。
的问题是,我的控制台回我这个错误:
Error: Can't set headers after they are sent.
所以我相信,随着我的回调这个问题。由于node.js的异步性质,“缓慢”的数据库调用使得我的.delete在findOne完成之前发送了头文件?
如何在删除前验证并发送正确的http错误代码?
答
当您在同一范围内多次回复请求时,请小心。出错时,您应该将return
加入res.send(err)
,以便执行不会继续进行。在for循环中,您的res.status()
也是如此。
我把它改成了一个回车,稍微调整了一下,现在就起作用了。谢谢 ! – metraon 2014-11-04 19:00:13