Node.js

[Node.js] 노드제이에스 - 미들웨어를 사용해 오류처리

Seong-Jun 2024. 2. 8. 10:36
728x90
반응형
SMALL

Do it! Node.js 프로그래밍 입문 공부단 6일차 입니다.

 

상태코드와 err 객체

코드 메시지 설명
400 Bad Request 클라이언트 요청이 잘못되었거나 유효하지 않음
401 Unauthorized 권한이 없어 거절되었지만 인증을 다시 시도할 수 있음
403 Forbidden 권한이 없어 거절되었고 인증을 시도하면 계속 거절됨
404 Not Found 해당 데이터를 찾을 수 없음
500 Internal Server Error 서버에서 요청을 처리하는 동안 오류가 발생

 

오류 처리를 위한 미들웨어 함수의 기본형
const errorHandler = (err, req, res, next) => {
	// err : 발생한 오류의 여러 정보가 담겨있음   
    	// err.message : 오류 메시지를 나타내는 문자열    
    	// err.name : 오류이름을 나타내는 문자열    
    	// err.stack : 오류가 발생한 위치를 알려주는 문자열
    	// err.status(또는 err.statusCode) : res.statusCode로 사용하는 숫자.
    	// 상태 코드가 4xx나 5xx가 아니라면 500으로 설정

    // next : 다음 미들웨어를 호출.
    // 미들웨어 함수를 만들 때는 next인자를 사용해서
    // 다음에 실행할 미들웨어로 넘어가도록 합니다.

    // ...
}

 

오류 처리를 위한 미들웨어 함수 만들기

middlewares/errorHandler.js

const errorHandler = (err, req, res, next) => {
    const status = err.status || 500
    switch (status) {
        // 잘못된 요청
        case 400:
            res.status(status).json({
                title: "Bad Request",
                message: err.message
            })
            break;
        // 권한 없음
        case 401:
            res.status(status).json({
                title: "Unauthorized",
                message: err.message
            })
            break;
        // 금지됨
        case 403:
            res.status(status).json({
                title: "Forbidden",
                message: err.message
            })
            break;
        // 찾을 수 없음
        case 404:
            res.status(status).json({
                title: "Not Found",
                message: err.message
            })
            break;
        // 서버 오류
        case 500:
            res.status(status).json({
                title: "Internal Server Error",
                message: err.message
            })
            break;
        default:
            res.status(status).json({
                message: "No Error"
            })
            break;
    }
}

module.exports = errorHandler

app.js

// 아래 코드 추가
const errorHandler = require("./middlewares/errorHandler")
app.use(errorHandler)

// err text code
app.get("/test", (req, res, next) => {
    const error = new Error("테스트용 에러")
    error.status = 401
    next(error)
})

 

미들웨어 등록 순서
  1. express를 비롯해 필요한 패키지 import
  2. express 인스턴스 생성
  3. 라우트나 오류처리 외의 미들웨어를 등록
  4. 라우트 코드나 라우터 미들웨어 등록
  5. 오류 처리 미들웨어 등록
  6. 서버 실행
728x90
반응형
LIST