2014-11-04 153 views
0

我有一個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錯誤代碼?

回答

1

當您在同一範圍內多次回覆請求時,請小心。出錯時,您應該將return加入res.send(err),以便執行不會繼續進行。在for循環中,您的res.status()也是如此。

+0

我把它改成了一個回車,稍微調整了一下,現在就起作用了。謝謝 ! – metraon 2014-11-04 19:00:13