본문 바로가기
Q&A2022년 9월 21일1분 읽기

Express.js 에러 핸들링 패턴

문
문성민
조회 624댓글 1

Express.js에서 에러 처리를 깔끔하게 하는 방법을 알려주세요.

댓글 1

김김영삼4년 전

Express.js 에러 핸들링:

// 1. 커스텀 에러 클래스
class AppError extends Error {
constructor(message, statusCode) {
super(message);
this.statusCode = statusCode;
}
}

// 2. async 에러 래퍼
const catchAsync = (fn) => (req, res, next) =>
fn(req, res, next).catch(next);

// 3. 라우트에서 사용
app.get("/users/:id", catchAsync(async (req, res) => {
const user = await User.findById(req.params.id);
if (!user) throw new AppError("사용자를 찾을 수 없습니다", 404);
res.json(user);
}));

// 4. 글로벌 에러 핸들러 (반드시 마지막에)
app.use((err, req, res, next) => {
const status = err.statusCode || 500;
res.status(status).json({
error: err.message,
...(process.env.NODE_ENV === "development" && { stack: err.stack })
});
});

프로덕션에서는 스택 트레이스를 클라이언트에 노출하지 마세요.

Ctrl+Enter로 등록