내 스크립트는 데이터베이스에 ID가 있는지 확인합니다. 그렇지 않으면 논리가 바로 그 다음에 멈춰 있어야합니다.문서가없는 경우 응답 중지
하지만 현재 "제공된 프로젝트 ID가 데이터베이스에 없습니다."를 반환하는 대신 "필요한 세부 정보를 모두 보내주십시오."가 표시됩니다. (아마 최초의 반환 함수의 우리를 필요하기 때문에) 내가 잘못 뭐하는 거지
var projectExists = function(pId, callback) {
ProjectsData.count({project_id: pId}, function(err, doc) {
if (err) {
throw err;
}
callback(doc);
});
};
// Create a new Game ID.
v1.post("/", function(req, res, next) {
if (!("project_id" in req.body)) {
return res.send("You need to provide Project ID");
}
// Check if the Project ID is in the file.
// Problematic bit
projectExists(req.body.project_id, function(c) {
if (c == 0) {
return res.send("The provided Project Id does not exist in our database.");
}
});
var gameDataObj = req.body;
GameData.addGameId(gameDataObj, function (err, doc) {
if (err) {
if (err.name == "ValidationError") {
return res.send("Please send all the required details.");
}
throw err;
};
res.json(doc);
})
});
? 이 작업을 수행하는 더 좋은 방법이 있습니까?
그리고 추가 질문; 우리가이 개 응답을 전송하지만 이상한 것은 res.headersSent을 확인하는 마지막 순간 false를 반환 할 때까지한다는 것입니다 때문에
Error: Can't set headers after they are sent.
at ServerResponse.OutgoingMessage.setHeader (_http_outgoing.js:344:11)
at ServerResponse.header (G:\node\vnlytics\node_modules\express\lib\response.js:719:10)
at ServerResponse.send (G:\node\vnlytics\node_modules\express\lib\response.js:164:12)
at G:\node\vnlytics\controllers\v1\game.data.js:35:17
at G:\node\vnlytics\controllers\v1\game.data.js:20:9
at Query.<anonymous> (G:\node\vnlytics\node_modules\mongoose\lib\model.js:3331:16)
at G:\node\vnlytics\node_modules\kareem\index.js:259:21
at G:\node\vnlytics\node_modules\kareem\index.js:127:16
at nextTickCallbackWith0Args (node.js:420:9)
at process._tickCallback (node.js:349:13)
그것은 아마 : ID가 잘못되면 현재의 반복에서,이 오류가 있습니다.
비동기 작업을 순서대로 지정해야합니다. 첫 번째 비동기 작업이 끝나기를 기다리지 않고 다음 비동기 작업으로 넘어갑니다. 따라서 모두 병렬로 실행되고 모두 완료되면 여러 응답을 보내려고합니다 (따라서 오류가 발생합니다). – jfriend00
오케이. 나는 그것을 보았고 Promise를 사용하여 그렇게 할 수있는 것처럼 보인다. – DragoonHP
일반적으로 오류가 올바르게 처리되지 않았 음을 의미합니다. err을 던지지 않고 next (err)를 사용하고 오류 처리기에서 도대체 무슨 일이 일어나고 있는지 확인하려고 했습니까? –