Error [ERR_HTTP_HEADERS_SENT]: Cannot set headers after they are sent to the client
[ERR_HTTP_HEADERS_SENT] 에러 내용
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();
}
'개발 > 에러해결' 카테고리의 다른 글
mongod --keyFile 시 permissions on /etc/mongodb.key are too open 또는 /etc/mongodb.key: bad file (4) | 2023.05.12 |
---|---|
티스토리 글쓰기 : 에디터가 정상적으로 실행되지 않았습니다. 잠시 후 다시 시도해주세요. (0) | 2023.05.10 |
Error: listen EADDRINUSE: address already in use 0.0.0.0:3000 (0) | 2023.05.10 |
undefined reference to 'pow', <math.h>랑 -lm 썼는데도 (0) | 2023.05.03 |
scanf 음수 입력이 안됨(한글 hwp 자동 교정 문제) (0) | 2023.05.03 |
댓글