• 카테고리

    질문 & 답변
  • 세부 분야

    풀스택

  • 해결 여부

    미해결

간단한 미들웨어를 만들어봤는데 에러가 발생합니다.

18.12.12 09:42 작성 조회수 548

0

처음에 root로 접속하면 hello를 응답하고 next()와 if문을 통해 50%의 확률로 다음 미들웨어로 이동하는 간단한 게임을 만들어봤습니다.

const express = require('express');

var app = express();

app.use('/', (req, res, next) =>{

res.send('hello');

next();

});

app.use((req, res, next) => {

if (+new Date() % 2 === 0) {

console.log('진행');

res.send('행운은 계속');

next();

} else {

console.log('꽝');

res.send('행운은 1까지 입니다 ㅠ_ㅠ');

}

});

app.use((req, res, next) => {

if (+new Date() % 2 === 0) {

console.log('진행');

res.send('행운은 계속');

next();

} else {

console.log('꽝');

res.send('행운은 2까지 입니다 ㅠ_ㅠ');

}

});

app.listen(3000, () => console.log(`Example!`))

하지만 새로고침을 할 때 마다

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

이런 에러가 발생합니다.

검색해 본 결과 next 이후에는 res.send를 사용할 수 없다는거 같은데 느낌이 잘 와닿지 않습니다.

제 코드에 어떤 문제가 있을까요?

답변 1

답변을 작성해보세요.

1

네 "res.응답메서드"는 한 번만 쓸 수 있습니다. res.send 후에 next()를 하면 다음 미들웨어에서 또 res.send를 하게 됩니다. next를 할 거면 next만 하고, res.send를 할 거면 더는 next를 호출해서는 안 됩니다.