Node.js删除请求

时间:2014-11-04 18:34:44

标签: node.js express

我有一个node.js应用程序,Express用于路由,Mongoose用于数据库访问。

我有这个HTTP DELETE请求,如果满足某些要求,则会删除数据库中的条目。

    .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'});
                });


    }
        }

    });

});

如果我发送带有电影ID的HTTP DELETE,它会检查演员列表中是否有Chuck Norris在电影中,如果他在那里我会阻止删除。

问题是我的控制台正在向我回复此错误:

Error: Can't set headers after they are sent.

所以我认为这是我的回调问题。由于node.js的异步特性,&#34;慢&#34;数据库调用使我的.delete在findOne完成之前发送了头文件?

如何在删除前设置验证并在无法删除时发送正确的http错误代码?

1 个答案:

答案 0 :(得分:1)

在同一范围内多次响应请求时要小心。如果出现错误,您应该将return添加到res.send(err),以便执行不会继续执行。对于for循环中的res.status()也是如此。