ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [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 문을 통해 응답을 하나만 하게 만들면 쉽게 오류를 해결 할 수 있습니다!

    반응형
Designed by LEO.