웹/Node.js

[Node.js] Express 5: 에러 처리(Error Handling)

2021. 2. 22. 12:55
목차
  1. 등록되지 않은 경로로 요청이 들어왔을 때 에러 처리 - 404 에러(Status 404)
  2. 에러 핸들러

이번 포스팅은 전 포스팅인 Express4: 라우터와 이어진다.

 

등록되지 않은 경로로 요청이 들어왔을 때 에러 처리 - 404 에러(Status 404)

익스프레스에서 404 응답은 에러로 인해 발생하는 결과가 아니므로 에러 핸들러(error-handler) 미들웨어는 이를 캐치하지 못한다. 이렇게 작동하는 이유는 익스프레스에서 404 응답은 단순히 실행해야 할 추가적인 작업이 없다는 것을 나타내기 때문이다. 다시 말해, 404 응답은 익스프레스는 모든 미들웨어 함수 및 라우터를 실행했으며 이들 중 어느 것도 응답하지 않았다는 것을 나타낸다.

 

이를 처리 하기 위해선 모든 미들웨어 함수 아래에 다음과 같은 미들웨어 함수를 추가하면 된다.

모든 함수 아래에 이러한 미들웨어를 추가하는 이유는 순차적으로 실행되는 미들웨어의 성질을 이용한 것이다.

.....

app.use('/', indexRouter);
app.use('/user', userRouter);

// 404 Error Handling
app.use(function(req, res, next) {
  res.status(404).send('Sorry cant find that!');
});

 

에러 핸들러

익스프레스는 기본적으로 내장된 에러 핸들러를 제공하며, 이 핸들러는 앱에서 발생할 수 있는 모든 에러를 처리한다.

다음과 같이 코드를 작성해서 에러 핸들러를 이용할 수 있다.

이 에러 핸들러는 모든 미들웨어 함수의 아래에 작성된다.

 

에러 핸들러 작성

app.use(function(err, req, res, next) {
  console.error(err.stack);
  res.status(500).send('Something broke!');
});

 

사용 예제

 

메인 코드의 아래에 에러 핸들러를 작성한 후, 에러를 처리하고자 하는 라우팅 함수의 매개변수에 next를 추가한다.

라우팅 함수 안에 존재하는 콜백함수 내에서 에러가 발생하면 next메소드에 이 err을 매개변수로 담아 에러 핸들러를 호출하게 된다. 

.....

app.use('/', indexRouter);
app.use('/user', userRouter);

// 404 Error Handling
app.use(function(req, res, next) {
  res.status(404).send('Sorry cant find that!');
});

app.use(function(err, req, res, next) {
  console.error(err.stack);
  res.status(500).send('Something broke!');
});

./routes/user.js

router.get('path', (req, res, next) => {
    function(params, callback(err) => {
      if(err) {
        next(err);
      } else {
        ...
      }
    });
    ...
})

 

저작자표시 비영리 (새창열림)

'웹 > Node.js' 카테고리의 다른 글

[Node.js] MongoDB: 개념 및 기본 쿼리문  (0) 2021.03.14
[Node.js] Express 6: 쿠키와 세션 (Cookie & Session)  (2) 2021.02.22
[Node.js] Express 4: 라우터(Router)  (1) 2021.02.20
[Node.js] Express 3: 미들웨어(Middleware)  (0) 2021.02.20
[Node.js] Express 2: 요청 객체와 응답 객체 (req & res)  (0) 2021.02.20
  1. 등록되지 않은 경로로 요청이 들어왔을 때 에러 처리 - 404 에러(Status 404)
  2. 에러 핸들러
'웹/Node.js' 카테고리의 다른 글
  • [Node.js] MongoDB: 개념 및 기본 쿼리문
  • [Node.js] Express 6: 쿠키와 세션 (Cookie & Session)
  • [Node.js] Express 4: 라우터(Router)
  • [Node.js] Express 3: 미들웨어(Middleware)
코택
코택
코택
TaxFree
코택
전체
오늘
어제
  • 분류 전체보기 (369)
    • Spring (29)
      • Spring (18)
      • 스프링 핵심 원리 - 고급편 (11)
    • Spring Batch (4)
    • JPA (4)
    • CS (89)
      • 자료구조 (2)
      • 네트워크 (5)
      • 운영체제 (1)
      • 데이터베이스 (4)
      • SQL (7)
      • 알고리즘 이론 (4)
      • 알고리즘 문제 풀이 (66)
    • 웹 (28)
      • React.js (4)
      • Next.js (1)
      • Node.js (14)
      • FastAPI (4)
      • Django (5)
    • 프로그래밍 언어 (45)
      • Python (5)
      • Java + Kotlin (29)
      • JavaScript + TypeScript (11)
    • 테스트코드 (26)
      • ATDD, 클린 코드 with Spring (4)
      • 이규원의 현실 세상의 TDD: 안정감을 주는 코드.. (20)
    • 인프라 (6)
      • AWS (2)
      • Kubernetes (4)
    • 트러블슈팅 (25)
    • 책 (89)
      • Effective Java (54)
      • Effective Kotlin (14)
      • 도메인 주도 개발 시작하기: DDD 핵심 개념 정.. (11)
      • 웹 프로그래머를 위한 데이터베이스를 지탱하는 기술 (6)
      • 도메인 주도 설계 첫걸음 (4)
    • Git (10)
    • 회고 (5)
    • etc (8)

블로그 메뉴

  • 홈
  • 방명록
  • 관리
  • GitHub
  • LinkedIn

공지사항

  • 스킨 관련

인기 글

태그

  • mysql
  • atdd
  • Git
  • fastapi
  • 그래프
  • 백준
  • 브루트포스
  • http
  • Shortest Path
  • 깊이 우선 탐색
  • 그래프 탐색
  • 파이썬
  • 장고
  • BOJ
  • dp

최근 댓글

최근 글

hELLO · Designed By 정상우.
코택
[Node.js] Express 5: 에러 처리(Error Handling)
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.