프로그래밍 언어/NODE JS

에러 처리 미들웨어

· 코딩마이데이

이제 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