에러 배경
node.js를 사용해 서버의 기본 틀을 만들어 가는 과정에서 에러가 발생했다. 현재 코드에서 에러를 처리하는 코드는 따로 없기 때문에 서버가 멈추는 건 아니지만 에러가 터미널에 출력된다.
에러 그 잡채
에러 메시지를 읽어보면 클라이언트에게 보내고 난 후에 headers를 set 할 수 없다.
Error [ERR_HTTP_HEADERS_SENT]: Cannot set headers after they are sent to the client
at ServerResponse.setHeader (node:_http_outgoing:659:11)
at ServerResponse.header (C:\Users\User\Desktop\TY\다른 컴퓨터\ProgrammersSchool\PROJECT-BOOKSHOP\node_modules\express\lib\response.js:795:10)
at ServerResponse.send (C:\Users\User\Desktop\TY\다른 컴퓨터\ProgrammersSchool\PROJECT-BOOKSHOP\node_modules\express\lib\response.js:175:12)
at ServerResponse.json (C:\Users\User\Desktop\TY\다른 컴퓨터\ProgrammersSchool\PROJECT-BOOKSHOP\node_modules\express\lib\response.js:279:15)
at C:\Users\User\Desktop\TY\다른 컴퓨터\ProgrammersSchool\PROJECT-BOOKSHOP\routes\books.js:15:19
at Layer.handle [as handle_request] (C:\Users\User\Desktop\TY\다른 컴퓨터\ProgrammersSchool\PROJECT-BOOKSHOP\node_modules\express\lib\router\layer.js:95:5)
at next (C:\Users\User\Desktop\TY\다른 컴퓨터\ProgrammersSchool\PROJECT-BOOKSHOP\node_modules\express\lib\router\route.js:149:13)
at Route.dispatch (C:\Users\User\Desktop\TY\다른 컴퓨터\ProgrammersSchool\PROJECT-BOOKSHOP\node_modules\express\lib\router\route.js:119:3)
at Layer.handle [as handle_request] (C:\Users\User\Desktop\TY\다른 컴퓨터\ProgrammersSchool\PROJECT-BOOKSHOP\node_modules\express\lib\router\layer.js:95:5)
at C:\Users\User\Desktop\TY\다른 컴퓨터\ProgrammersSchool\PROJECT-BOOKSHOP\node_modules\express\lib\router\index.js:284:15
해결 과정
해결. res를 두 번 보냈는지 확인
하나의 요청에 조건문을 통해 여러 응답을 보내고 있는 상황에서 else로 조건을 나눠주지 않거나 return을 해주지 않아서 하나의 요청에 res가 두 번 날아가서 발생한 에러였다.
router.route("/").get((req, res) => {
// 카테고리별 책 목록 조회
const { categoryId, isNew } = req.query;
if (categoryId && isNew) {
return res.status(200).json({
message: "카테고리별 책 목록 조회 success",
});
}
// 전체 책 목록 조회
res.status(200).json({
message: "전체 책 목록 조회 success",
});
});
정리
이번 에러는 단순한 에러였기 때문에 금방 찾아낼 수 있었다.
'에러' 카테고리의 다른 글
| [MySQL Error 1005 - errno: 121] 외래키 설정이 안되네? (1) | 2024.05.28 |
|---|---|
| [JS Array.map 에러] map(Number)는 되는데 map(parseInt)는 왜 안돼? (0) | 2024.05.27 |
| [mariadb 1175 에러] 업데이트하는데 키를 이용하라고? (0) | 2024.05.09 |
| [docker-mariadb와 Node.js, mysql workbench 연동 에러] 왜 연결이 안돼... (0) | 2024.05.06 |
| [npm install 에러] package.json, package-lock.json, node_modules 어디갔어? (0) | 2024.04.22 |