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

마데슾 : My Dev Space·2021년 2월 3일
10

NodeJS 개발자로서 다음과 같은 런타임 오류가 발생할 가능성이 있습니다.

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

오류 [ERR_HTTP_HEADERS_SENT]는 서버가 클라이언트에 둘 이상의 응답을 보내려고 할 때 발생하는 흥미로운 오류입니다. 이것이 의미하는 바는 주어진 클라이언트 요청에 대해 서버이전에 응답 (요청 된 리소스가있는 성공 응답 또는 잘못된 요청에 대한 오류 응답)을 클라이언트로 보냈고 이제 예기치 않게 다른 응답을 보내려고한다는 것입니다.

const express = require('express');
const bodyParser = require('body-parser');
const app = express();

app.use(bodyParser.json());

app.post('/test', (req, res) => {
  if (!req.body.name) {
    res.status(400).json({
      status: 'error',
      error: 'req body cannot be empty',
    });
  }

  res.status(200).json({
    status: 'succes',
    data: req.body,
  })
});
app.listen(4000, () => {
  console.log('Server live');
});

위의 코드에서 if문 조건이 통과되면 res.status(400).json이 발생한 후 그 후에 res.status(200).json으로 인해 다른 응답을 보내려고 시도하고 여기에서 오류가 발생합니다.

이미 응답을 한번 보냈는데 두 번째 응답을 보내려 시도하기 때문에 서버가 충돌하므로 오류 메시지가 표시됩니다.

오류를 해결하려면?

if 조건부에서 전송되는 응답에 javascript return 문을 추가하여 응답이 클라이언트에 전송되면 코드를 종료시키는 것입니다.

if (!req.body.name) {
  return res.status(400).json({
    status: 'error',
    error: 'req body cannot be empty',
  });
}

참고 블로그

profile
👩🏻‍💻 🚀

4개의 댓글

comment-user-thumbnail
2021년 4월 29일

덕분에 잘 해결했습니다!

답글 달기
comment-user-thumbnail
2022년 1월 29일

감사합니다~

답글 달기
comment-user-thumbnail
2023년 8월 17일

덕분에 해결했어요. ㅠㅠ

답글 달기
comment-user-thumbnail
2023년 9월 15일

굿입니다!

답글 달기