본문 바로가기

백엔드

노드 회원가입, if else문 중복 값 전송에러. Error [ERR_HTTP_HEADERS_SENT]: Cannot set headers after they are sent to the client

노드에서 if else문을 작성했는데 이런 에러 메세지가 떴다.

 

 

Error [ERR_HTTP_HEADERS_SENT]: Cannot set headers after they are sent to the client

 

<에러전문>

Error [ERR_HTTP_HEADERS_SENT]: Cannot set headers after they are sent to the client
    at new NodeError (node:internal/errors:372:5)
    at ServerResponse.setHeader (node:_http_outgoing:576:11)
    at ServerResponse.header (C:\Users\SJ\Desktop\elice\study\back\node_modules\express\lib\response.js:794:10)
    at ServerResponse.send (C:\Users\SJ\Desktop\elice\study\back\node_modules\express\lib\response.js:174:12)
    at ServerResponse.json (C:\Users\SJ\Desktop\elice\study\back\node_modules\express\lib\response.js:278:15)
    at C:\Users\SJ\Desktop\elice\study\back\src\router\userRouter.js:58:21
    at processTicksAndRejections (node:internal/process/task_queues:96:5)

 

 

 

 

<오류 원인>  if else

if문에서 이미 결과를 보냈는데,

그 후에 else에서도 결과 값을 또 전송하려고 해서 생기는 문제인듯 하다. 

 

즉, 이중으로 응답을 보내려고 할때  발생하는 문제이고,

"headers는 이미 클라이언트 한테 보냈는데 또 보낼수 없다" 라고 말해주는 것. 

 

 

 

 

<해결방법>

if() {결과값} else{결과값}  으로 작성했던 if else문을

if() {return 결과값} else {return 결과값} 으로 return을 붙여주니 해결되었다.

 

이건 오류가 났던 코드

 

이건 수정을 해서 return을 붙인 코드. 아래처럼 return을 붙여주니 에러가 안났다.

if()

{return 결과값}

else {return 결과값} 

 

이렇게 return을 붙여주면 된다.