에러 처리 미들웨어
이제 404 응답 미들웨어와 에러 처리 미들웨어를 다음과 같이 수정하여 에러 발생 시 error.html에 에러 내용을 표시합니다.
app.js
app.use((req, res, next) => {
const error = new Error(`${req.method} ${req.url} 라우터가 없습니다.`);
error.status = 404;
next(error);
});
app.use((err, req, res, next) => {
res.locals.message = err.message;
res.locals.error = process.env.NODE_ENV !== "production" ? err : {};
res.status(err.status || 500);
res.render("error");
});
만약 404 에러가 발생한다면 res.locals.messagesms '${req.method} ${req.url}라우터가 없습니다'가 됩니다. next(error)에서 넘겨준 인수가 에러 처리 미들웨어의 err로 연결되기 때문입니다.
에처 처리 미들웨어는 err라는 템플릿 파일(넌적스이므로 error.html 파일)을 렌더링합니다. 렌더링 시 res.locals.message와 res.locals.error에 넣어준 값을 넣어준 값을 함께 렌더링합니다. res.render에 변수를 대입하는 것외에도, 이렇게 res.locals 속성에 값을 대입하여 템플릿 엔진에 변수를 주입할 수 있습니다.
error 객체의 스택 트레이스(error.html의 error.stack)는 시스템 환경(process.env.NODE_ENV)이 production(배포 환경)이 아닌 경우에만 표시됩니다. 배포 환경인 경우에는 에러 메시지만 표시됩니다. 에러 스택 트레이스가 노출되면 보안에 취약할 수 있기 때문입니다.
서버를 실행하고 localhost:3000/abc에 접속하면 에러 메시지와 함께 응답 코드, 스택 트레이스를 확인할 수 있습니다.
서버를 실행하고 localhost:3000/abc에 접속하면 에러 메시지와 함께 응답코드, 스택 트레이스를 확인할 수 있습니다.

위 그림에서 404 아래의 Error 부분이 스택 트레이스입니다. 스택 트레이스를 통해 서버 폴더 구조를 유추할 수 있으므로 배포 환경에서는 숨기는 것입니다.
'프로그래밍 언어 > NODE JS' 카테고리의 다른 글
| 데이터베이스란? (1) | 2025.08.04 |
|---|---|
| extends와 block (1) | 2025.08.01 |
| 넌적스 - 반복문 & 조건문 (0) | 2025.07.29 |
| 넌적스 - 변수 (1) | 2025.07.26 |
| 넌적스 (2) | 2025.07.23 |