✏️ 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');
});