평범하게 express 모듈을 사용하여 서버 토대를 만들고 그안에서 미들웨어를 사용하고 있습니다.
app.use("/about", (req, res, next) => {
// "/about"에 대한 모든 요청이 들어 올 때 실행된다.
console.log("about에서만 실행");
res.write("<h1>only in about</h1>");
res.write("of course");
res.end();
next();
});
app.get("/about/:id", (req, res) => {
// 위에 있던 미들 웨어가 use로 사용되어서 res.send를 사용하면 요청을 두번 보내버리는 효과가 있어 오류가 난다.
res.send(`<h1> ${req.params.id} </h1>`);
});
위에 상태로 실행하게 되면 Cannot set headers after they are sent to the client 오류가 나옵니다.
그러나 다시 아래와 같이 수정하면
app.get("/about", (req, res, next) => {
// "/about"에 대한 모든 요청이 들어 올 때 실행된다.
console.log("about에서만 실행");
res.write("<h1>only in about</h1>");
res.write("of course");
res.end();
next();
});
app.get("/about/:id", (req, res) => {
// 위에 있던 미들 웨어가 use로 사용되어서 res.send를 사용하면 요청을 두번 보내버리는 효과가 있어 오류가 난다.
res.send(`<h1> ${req.params.id} </h1>`);
});
코드가 정상 실행되며 /about/:id 경로에서 id값을 입력하면 res.send()함수에 id값이 잘 들어오게 됩니다.
get과 use에 어떠한 차이점 때문에 이러힌 결과가 나오는 건지 궁금합니다.
2022. 01. 02. 20:31
"/about"과 "/about:id"가 같은 "/about"에 속해 있고 app.use가 두 가지가 속해 있는 "/about"을 동시에 타서 res.end()가 두번 호출되어서 cannot set headers 에러가 발생한거군요 좋은 설명 감사합니다!