자바스크립트를 허용해주세요.
[ 자바스크립트 활성화 방법 ]
from Mohon Aktifkan Javascript!
 

[Express] 5장 에러 처리

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