- app.get에 미들웨어(콜백함수)가 두개 연결되어 있다.
next를 호출하면 바로 다음 미들웨어로 넘어가고, 두번째 미들웨어에서 catch로 에러를 잡아서 next함수 인자를 주면 바로 에러처리 미들웨어로 점프하게 된다
app.get('/error', (req, res, next) => {
next();
}, (req, res) => {
try {
} catch(err) {
error(err);
}
});
...
app.use((err, req, res, next) => {
console.error(err);
res
.status(500)
.send(err.message);
})
next()
- next()를 하면 다음 미들웨어로 넘어가고, next(인수)를 하면 에러 핸들러로 넘어가게 된다(위 코드)
- next('route')를 하게되면 다음 미들웨어가 아닌 다음 라우터로 넘어가게 된다
- next를 호출하지 않는 미들웨어는 res.send나 res.sendFile등의 메서드로 응답을 보내야한다
app.get('/', (req, res, next) => {
if (false) {
next();
} else {
next('route');
}
}, (req, res) => {
});
app.get('/', (req, res, next) => {
})
wrapAsync()
- 모든 비동기 미들웨어 함수에서 wrapAsync()를 호출하면 모든 비동기 예외가 익스프레스 오류 처리기에서 종료된다