728x90
✅ 1. Express 에러 처리
Express에서 에러 처리는 보통 Error-Handling-MiddleWare(에러 핸들링 미들웨어)를 따로 추가해서 관리하며, 특히 라우터나 로직에서 발생한 에러를 next(err)로 넘겨주면서 미들웨어가 받아서 처리할 수 있습니다
const express = require("express");
const app = express();
// 일반적인 라우트
app.get("/", (req, res) => {
res.send("Hello Express!");
});
// 에러를 일부로 발생시키는 코드
app.get("/error", (req, res, next) => {
const err = new Error("Warning! Error");
err.status = 400; // 에러 코드 400 발생
next(err); // 에러 핸들링 미들웨어 전달
});
// 에러 핸들링 미들웨어 (맨 아래에 정의)
app.use((err, req, res, next) => {
console.error(err.stack); // 에로 로그 출력코드
res.status(err.status || 500).json({
success: false,
message: err.message || "Server Error!", // const로 선언한 err 또는 "Server Error" 메시지 출력
});
});
// 서버 실행
app.listen(3000, () => {
console.log("Server is Running http://localhost:3000");
});
- 에러 핸들링 미들웨어는 4개의 파라미터 (err, req, res, next)를 꼭 가져야함
- 반드시 모든 라우터/미들웨어 뒤에 위치
- 애러 객체에 status나 code 같은 속성을 직접 붙여 클라이언트에 알맞은 상태 코드를 내려줌
- 개발 환경에서 console.error(err.stack)으로 디버깅, 운영환 경에서는 로깅 시스템(ex.winston, morgan)을 연결해 관리하는 것이 일반적임
✅ 2. 에러 핸들링 미들 웨어 파일 분리
프로젝트 규모가 커질 수록 에러핸들링을 관리할 수 있도록 파일을 분리해놓겠습니다.
project/
┣ src/
┃ ┣ routes/
┃ ┃ ┗ index.js
┃ ┣ middlewares/
┃ ┃ ┗ errors.js
┃ ┗ app.js
┗ server.js
// project/middlewares/errors.js
// 에러 핸들링 미들웨어
function errors(err, req, res, next) {
console.error(err.stack);
// 클라이언트에게 내려줄 에러 응답
res.status(err.status || 500).json({
success: false,
message: err.message || "Server Error!",
});
}
module.exports = errors;
// routes/index.js
const express = require("express");
const router = express.Router();
// 기본 라우터
router.get("/", (req, res) => {
res.send("Main Page!");
});
// 방문 시 에러 발생 코드
router.get("/error", (req, res, next) => {
const err = new Error("Test Error Handling!");
err.status = 400;
next(err);
});
module.exports = router;
// app.js
const express = require("express");
const routes = require("./routes");
const errorHandler = require("./middlewares/errors");
const app = express();
// 라우터 연결
app.use("/", routes);
// 에러 핸들링 미들웨어 (항상 라우터 뒤에)
app.use(errorHandler);
module.exports = app;
// server.js
const app = require("./src/app");
const PORT = process.env.PORT || 3000;
app.listen(PORT, () => {
console.log(`Serer is Running Port http://localhost:${PORT}`);
});
GitHub - Koras02/express-bloging: https://thinky.tistory.com/category/Back-End/Express
https://thinky.tistory.com/category/Back-End/Express - Koras02/express-bloging
github.com
728x90
LIST
'Back-End > Express' 카테고리의 다른 글
[Express] 4장 정적 파일 제공 (4) | 2025.08.16 |
---|---|
[Express] 3장 - 미들웨어 적용 (1) | 2025.08.13 |
[Express] 2장 - 라우팅 구현 (4) | 2025.08.11 |
[Express] 1장 Express란 무엇인가 (3) | 2025.08.10 |