관리 메뉴

프로그래밍 삽질 중

[JS - node.js] Cannot set headers after they are sent to the client 오류 본문

과거 프로그래밍 자료들/Javascript&typescript

[JS - node.js] Cannot set headers after they are sent to the client 오류

평부 2022. 1. 16. 22:55

* 윈도우 기준

* 웹을 만드는 도중 404 error : 요청한 페이지 찾을 수 없음,

500 error : 맞긴 한데 뭔가 잘못해서 정확한 값을 찾지 못함으로 분리해서 만들었는데 session의 header값들이 나오지 않음

-> 원래 목적 : 로그인 시 session을 통해 nickname의 값이 나오도록 하는 것이 목적

 

 

[오류 모습]

1
2
3
Error [ERR_HTTP_HEADERS_SENT]: Cannot set headers after they are sent to the client
    at new NodeError (node:internal/errors:371:5)
    at ServerResponse.setHeader (node:_http_outgoing:576:11)
cs

*  문제 해결 시 참고한 블로그

(https://velog.io/@yhe228/ERRHTTPHEADERSSENT-Cannot-set-headers-after-they-are-sent-to-the-client)

 

 

 

 

[무엇이 문제?]

-> 원인 : 서버가 클라이언트에 둘 이상의 응답을 보내려고 할 때 발생하는 오류.

주어진 클라이언트 요청에 대해 서버 이전에 응답 (요청 된 리소스가있는 성공 응답 또는 잘못된 요청에 대한 오류 응답)을 클라이언트로 보냈고 이제 예기치 않게 다른 응답을 보내는 것

 

 

 

 

[해결방법] -> 응답이 클라이언트에 전송되도록 return문 사용

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
//수정 전
app.use(function(request, response, next) {
  response.status(404).send('Sorry cant find that!');
});
 
app.use(function (err, request, response, next) {
    console.error(err.stack)
    response.status(500).send('Something broke!')
});
 
 
//수정 후 -> response 앞에 return을 
app.use(function(request, response, next) {
  return response.status(404).send('Sorry cant find that!');
});
 
app.use(function (err, request, response, next) {
    console.error(err.stack)
    return response.status(500).send('Something broke!')
});
cs