라우팅 용 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 오류 코드를 보내려면 어떻게해야합니까?
나는 그것을 반환으로 바꿨고, 나머지를 조금씩 바꿨다. 그리고 그것은 지금 작동한다. 감사 ! – metraon