본문 바로가기
개발/에러해결

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

by amkorousagi 2023. 5. 10.

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

 

[ERR_HTTP_HEADERS_SENT] 에러 내용


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

express에서 응답을 하는 도중 위와 같은 오류가 출력됩니다.

 

[ERR_HTTP_HEADERS_SENT] 에러 원인


이미 응답을 보냈는데 한번 더 응답을 보내면 위와 같은 오류가 출력됩니다.

이미 전송한 응답에 있는 메시지를 수정할 수 없기 때문입니다.

 

저의 경우에는 middleware에서 설정한 error handling 후 실패 응답을 보냈는데 이후 종료하지 않고 next()를 호출하여 다시 응답을 보내려고 시도하였기 때문에 발생하였습니다.

 

[ERR_HTTP_HEADERS_SENT] 해결 방법


응답을 두번 보내는 부분이 있는지 확인해 봅시다.

res.send()를 똑같은 함수에서 두 번 쓰는 실수를 하는 경우는 거의 없으니,

특히 미들웨어에서 응답을 보낸 후 next()를 호출하는지 확인합시다.

 

오류 예시 : 미들웨어에서 error에 대한 응답을 보낸 후 next()를 호출한다.

export async function my_middleware(req, res, next){
    if(error){
        res.send(error);
    }
    
    next();
}

 

정답 예시 : error에 대한 응답을 보낸 후, return으로 next()를 호출하기 전에 미들웨어를 종료한다.

export async function my_middleware(req, res, next){
    if(error){
        return res.send(error);
    }
    
    next();
}

 

댓글