• 카테고리

    질문 & 답변
  • 세부 분야

    백엔드

  • 해결 여부

    미해결

5:30초때 app.post 부분 에러가 나요

22.03.31 14:51 작성 조회수 333

1

app.post('/post/upload', (req, res) => {
  counter
  .findOne({name: "counter"})
  .then((counterInfo) => {
    post
    .insertOne({
      _id: counterInfo.postNum,
      title: req.body.title,
      contents: req.body.contents,
      date : new Date()
    })
    .then(() => {
      counter
        .findOneAndUpdate(
          {name:"counter"},
          {
            $inc : {postNum: 1},
          }
        )
        .then(() => {
         res.redirect("/");
        });
    });
  })
  .catch((err) => {
    console.log(err);
    res.send("글 저장에 실패");
});
})
 
 
 
이렇게 했는데 에러가
node:internal/errors:464 ErrorCaptureStackTrace(err);
 
    at new NodeError (node:internal/errors:371:5)
    at ServerResponse.setHeader (node:_http_outgoing:576:11)
    at ServerResponse.header (D:\inflearn-express\node_modules\express\lib\response.js:776:10)
    at ServerResponse.location (D:\inflearn-express\node_modules\express\lib\response.js:893:15)
    at ServerResponse.redirect (D:\inflearn-express\node_modules\express\lib\response.js:931:18)
    at D:\inflearn-express\index.js:38:13
    at processTicksAndRejections (node:internal/process/task_queues:96:5) {
  code: 'ERR_HTTP_HEADERS_SENT'
}
[nodemon] app crashed - waiting for file changes before starting...
 
이렇게 나길래 찾아보니까 이미 응답을 보냈는데 한번더 응답을 보내려 할때 서버에서 충돌이 나서 오류가 나는거라고 하더라구요? 그래서 
res.redirect("/"); 여기를
return res.redirect("/");
이렇게 고치니까 에러가안나는데 맞는건가요???

답변 1

답변을 작성해보세요.

0

아닙니다!

해당 api 규칙은 post doc를 저장하고, 저장 여부에 따라 응답을 한번만 실행하기에 응답을 중복해서 보낼 일이 없습니다. (말씀해주신 에러가 응답을 여러번 보낼 때 발생하는 에러는 맞습니다.)

return 구문을 통해 에러가 해결이 된 것은,

api를 응답과 동시에 요청을 끝내서 해결이 된 것 같습니다.

제 생각에는 현재 수강자분 코드에서 라우팅 규칙이 조금 꼬여있는 것 같은데,

크게 확인할 수 있는 에러가 없다면 상관 없겠지만 조금 찝찝하시다면

제가 코드를 확인할 수 있는 깃헙링크 첨부해주시면 확인해보도록 하겠습니다 :)

김HUSH님의 프로필

김HUSH

질문자

2022.04.01

라우팅 규칙 꼬인게 맞는거 같아요!
뒷강의 수강하다가 다시 return 지우니까
에러가 안뜨네요 답변감사합니다