Express.js의 에러 처리 미들웨어
- 에러 처리 미들웨어는 Express.js가 공식적으로 제공하는 기능으로, 아래와 같은 구조를 가지고 있다.
app.use((err, req, res, next) => {
console.error(err.stack);
res.status(500).send('Something broke!');
});
에러 처리 미들웨어의 항목
- err : 이전 미들웨어에서 발생한 에러를 전달받은 객체
- req, res : 일반적으로 사용하는 HTTP 요청과 응답을 관리 하는 객체
- next : 다음 미들웨어를 실행하는 함수
에러를 인자로 전달받아 클라이언트에게 에러 응답을 반환하거나 다음 미들웨어로 에러를 전달하는 역할을 담당한다.
( Express.js에서 미들웨어나 라우터에서 에러가 발생하면, 해당 에러를 next 함수를 통해 다음 미들웨어로 전달한다. 그리고 Express.js는 등록된 미들웨어 중 에러를 매개변수로 받는 미들웨어를 찾아 실행하게 되는 것 )
에러 발생 시 에러를 처리하는 미들웨어 작성
export default function (err, req, res, next) {
console.error(err);
// Joi 검증에서 에러가 발생하면, 클라이언트에게 에러 메시지를 전달한다.
if (err.name === 'ValidationError') {
return res.status(400).json({ errorMessage: err.message });
}
// 그 외의 에러가 발생하면, 서버 에러로 처리한다.
return res
.status(500)
.json({ errorMessage: '서버에서 에러가 발생하였습니다.' });
}
에러 처리 미들웨어 등록
import ErrorHandlerMiddleware from './middlewares/error-handler.middleware.js';
app.use('/api', [router, TodosRouter]);
app.use(ErrorHandlerMiddleware); // 에러 핸들링 미들웨어 등록
- 에러 처리 미들웨어를 Router 하단에 등록해야 이전 미들웨어에서 발생한 에러에 대해 핸들링 할 수 있다. ( next()를 통해 에러 처리 미들웨어로 전달하기 때문에 )
'Javascript' 카테고리의 다른 글
[Javascript][실습] 게시판 프로젝트 (1) | 2024.09.08 |
---|---|
[Javascript] Prettier ( 코드 서식 관리 도구 ) (0) | 2024.09.04 |
[Javascript][Node.js] joi ( 유효성 검증 ) (0) | 2024.09.04 |
[Javascript][Node.js] Middleware ( 미들웨어 ) (0) | 2024.09.03 |
[Javascript][Node.js] MongDB 코드에서 연결 ( mongoose ) (0) | 2024.09.03 |