2014-11-04 2 views
0

라우팅 용 Express와 데이터베이스 액세스 용 Mongoose가있는 node.js 응용 프로그램이 있습니다.Node.js 삭제 요청

특정 요구 사항이 충족되는 경우 데이터베이스의 항목을 삭제하는 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'}); 
       }); 


    } 
     } 

    }); 

}); 

나는 HTTP이 영화의 ID와 DELETE 보낼 경우 척 노리스 영화에있는 경우, 그것은 배우 목록에서 확인하고 그가이 있다면 삭제를 방지 할 수 있습니다.

문제는 내 콘솔이 날이 오류를 반환하는 것입니다 :

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

그래서 나는 감히 나의 콜백이 문제. node.js의 비동기 특성 때문에 "느린"데이터베이스 호출은 findOne이 끝나기 전에 내 .delete가 헤더를 보냈습니다.

삭제하기 전에 유효성을 검사하고 삭제가 불가능할 경우 적절한 http 오류 코드를 보내려면 어떻게해야합니까?

답변

1

같은 범위에서 요청에 여러 번 응답 할 때주의하십시오. 오류가 발생하면 returnres.send(err) 앞에 추가해야 실행이 더 이상 계속되지 않습니다. for 루프의 res.status()도 마찬가지입니다.

+0

나는 그것을 반환으로 바꿨고, 나머지를 조금씩 바꿨다. 그리고 그것은 지금 작동한다. 감사 ! – metraon