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()也是如此。

+0

我把它改成了一个回车,稍微调整了一下,现在就起作用了。谢谢 ! – metraon 2014-11-04 19:00:13