-
[ERR_HTTP_HEADERS_SENT]: Cannot set headers after they are sent to the client 오류error handling 2023. 3. 18. 09:29반응형
[ERR_HTTP_HEADERS_SENT]
node 로 express를 통해 작업 중
pm2 log 확인 중이었는데 아래와 같은 오류가 발생했습니다. [ERR_HTTP_HEADERS_SENT]: Cannot set headers after they are sent to the client 오류 [ERR_HTTP_HEADERS_SENT]는 서버가 클라이언트에 둘 이상의 응답을 보내려고 할 때 발생하는 오류라는 것을 발견했다. 즉 하나의 응답을 보낸 후, 또 다른 응답을 동시에 보내려고 할 때 생기는 오류 입니다.예시
router.get("/", verifyToken, (req, res) => { if (req.user) { res.send(`${req.user.username}님 로그인 되었습니다.`); } res.send("로그인 후 이용해주세요."); });
위 코드를 보면 req.user에 값이 있을 경우에 그 안에 담긴 username 값을 포함해서 내보내고, 만약 없다면 "로그인 후 이용해주세요." 라는 문구를 내보내게 만들었습니다.
이때 req.user값이 있어서 if 문을 들어가게 되면 앞서 말했던 username을 포함한 값을 내보낸 후 나와서 "로그인 후 이용해주세요." 라는 문구까지 내보내려고 응답을 중복해서 두번 내려하기 때문에 오류가 발생하는 것 입니다.-
nest js는 효율적이고 안정적이며 모듈 식 아키텍처를 갖춘 진보적인 node js 프레임워크다.
타입스크립트록 구축되었지만 js와 호환되며 js 사용도 가능하다.
앵귤러에 익숙한 경우 nest가 편할 것 / 디자인 패턴에 있어서 장점을 가졌다.
nestjs/mongoose / react, typescript
모듈은 @Module() 데코레이터로 주이 달린 클래스이다nest js / wikidoc 프레임워크
자바-스프링 / 파이썬-장고timer -> pending callbacks -> idle, prepare -> poll -> check -> close callbacks
-
해결 방법
router.get("/", verifyToken, (req, res) => { if (req.user) { return res.send(`${req.user.username}님 로그인 되었습니다`); } return res.send("로그인 후 이용해주세요."); });
위 코드 처럼 내보낼 때 return 문을 통해 응답을 하나만 하게 만들면 쉽게 오류를 해결 할 수 있습니다!
반응형'error handling' 카테고리의 다른 글
[ Error ] TypeScript error TS1005: ';' expected (0) 2023.06.24 [ Webstrom ] ESLint: Please specify path to 'eslint' package (0) 2023.04.08 npm run dev 에러 (feat. Node js) (0) 2022.06.26 [final project] S3 이미지 업로드 AWS 에러(feat. ACL) (0) 2022.05.09 [final project] TypeOrm에서 req.params 컴파일 오류 & typeorm-seeding 설치 오류 (0) 2022.04.23