Express) middleware 와 오류 처리

알파로그·2023년 12월 14일
0

Node.js

목록 보기
19/25

✏️ Middleware

  • 미들웨어는 애플리케이션으로 들어오는 HTTP 요청 위에서 동작하는 기능을 캡슐화 하는 개념이다.

📍 Express 의 Middleware 원칙

  • get, post 는 라우트 핸들러라고 부르며,
    특정 HTTP 동사만 처리하는 미들웨어이다.
  • next 는 파이프라인을 유지시키는 매개변수로 호출하지 않는다면 파이프라인이 종료되고,
    클라이언트에게 응답을 보내야 한다.
    - next() 를 호출하면 이후의 라우트 핸들러와 미들웨어가 호출된다.

📍 기본적인 오류처리

  • 오류처리는 모든 라우트 핸들러의 가장 마지막에 선언해줘야 한다.
    • 모든 핸들러를 거치고 응답이 되지 못할 경우에 호출되어야 하기 때문
var app = require('express')();

app.use(function(err, req, res, next){
    console.log('unhandled error detected: ' + err.message);
    res.send('500 - server error');
});

app.use(function(req, res){
    console.log('route not handled');
    res.send('404 - not found');
});

📍 특정 라우팅에 대한 오류 처리

  • 특정 라우팅에 대한 오류처리를 하나의 라우팅 핸들러 내에서 처리할 경우 비즈니스 로직과 오류처리 로직이 섞여 가독성이 떨어진다.
    • 이 둘은 분리해주는것이 좋다.
  • 아래는 /b 경로 요청에 대한 처리 과정이다.
    • 해당 경로로 요청이 발생하면 error 를 발생시킨다.
    • error 가 발생하면 경로에 대한 에러처리 미들웨어로 이동하게 된다.
      • 에러처리 미들웨어가 라우팅 핸들러 보다 아래에 위치해야 한다.
app.get('/b', function(req, res, next){
    console.log('/b (part 2): error thrown' );
    throw new Error('b failed');
});

app.use('/b', function(err, req, res, next){
    console.log('/b error detected and passed on');
    next(err);
});
  • 위 코드의 에러처리 핸들러에서 next 함수는 err 를 파라미터로 전달하고 있다.
    • 즉, 아래 가장 마지막에 위치한 에러처리 핸들러중 err 를 매개변수로 갖고있는 500 server error 쪽이 호출되게 된다.
    • next() 를 호출했다면 404 쪽이 호출된다.
app.use(function(err, req, res, next){
    console.log('unhandled error detected: ' + err.message);
    res.send('500 - server error');
});

app.use(function(req, res){
    console.log('route not handled');
    res.send('404 - not found');
});
profile
잘못된 내용 PR 환영

0개의 댓글