나는 nodejs와 함께 정말 이상한 문제가있다.Node.js express, timeout "보낸 후 헤더를 설정할 수 없습니다."
요청을 처리하는 제 기능 중 하나는 DB에서 무언가를 가져와 JSON으로 클라이언트에 보내야합니다.
- GET 요청
- 통화 DB
- 프로세스 데이터를 정상적으로
JSON에
는 그래서 이렇게되면 모두 괜찮아 질 것입니다.하지만 비동기 적으로 2와 3 사이의 시간 초과가 있으면 자동으로 응답을 만들고 오류가 발생합니다 "h 그들이 보낸 후에 eaders. " 전화 할 때
다른 사람이이 문제를 겪고 있습니까? 그것을 처리하는 정상적인 방법이 있습니까 아니면 그냥 response._header가 allready 설정되어 있는지 확인해야합니까?
exports.appstimebygroup = function (req, res) {
var resp = {};
var clientId = Webapi.extractClientId(req);
AppTime.getByGroupId(clientId, req.body.groupId, function(error, appstime){
if (error) {
handleError(error);
resp.returnCode = 0;
resp.message = "Some error have happened, please contact support!";
res.setHeader("Content-Type", "application/json");
res.json(resp);
return;
}
resp.returnCode = 1;
resp.appstime = appstime;
if(res._header){
console.log("header allready set!");
return;
}
res.setHeader("Content-Type", "application/json");
res.json(resp);
});
};
그리고 AppTime.getByGroupId에는 비동기 호출이 있습니다.
내 생각에 비동기 요청이 응답을 보내기 전에 먼저 완료 될 때까지 기다리지 않아서 동일한 요청에 대해 응답을 두 번 보내려고합니다. 관련 코드를 게시하면 확실하게 알 수 있습니다. – mscdex
코드를 추가했습니다. 하지만 이미 설명했듯이 코드에는 문제가 없습니다. 타임 아웃은 비동기 호출 중간에 타임 아웃이 발생하고 익스프레스가 헤더를 설정하여 전송하기 때문에 문제가 발생합니다. 그리고 통화가 끝나면 내 기능이 다시 시도합니다. 이 오류를 독립형으로 반복 할 수도 있습니다. –
나는 여기에서 무엇이든 잘못 보지 않는다. 'handleError'는 무엇을 하는가? 또한'Content-Type' 헤더를 설정하는 이유는 무엇입니까? 'res.json'은 이미 당신을 위해 이것을합니다 -> [링크] (https://github.com/strongloop/express/blob/12f92a50dc59887c30f4c6f23fdfbfc616dcbef5/lib/response.js#L232) – Jordonias