에러처리 미들웨어_Express

miin·2022년 4월 3일
0

Express & node.js

목록 보기
3/10
post-thumbnail
  • app.get에 미들웨어(콜백함수)가 두개 연결되어 있다.
    next를 호출하면 바로 다음 미들웨어로 넘어가고, 두번째 미들웨어에서 catch로 에러를 잡아서 next함수 인자를 주면 바로 에러처리 미들웨어로 점프하게 된다
app.get('/error', (req, res, next) => {
next(); // next()에 인수가 없다면, 바로 다음 미들웨어 함수로 넘어가게 된다.
}, (req, res) => {
try {
// .. 에러 발생 코드
} catch(err) {
error(err); // next()에 인수가 있다면, 에러 처리 미들웨어로 점프하게 된다.
}
});
...
// 에러 미들웨어는 인자는 반드시 4개 선언
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'); // next()에 'route'인수를 주게되면, 다음 미들웨어가 아닌, 다음 라우터로 넘어가게 된다.
}
}, (req, res) => {
// ... next()면 실행되지만,
// ... next('route')면 실행되지 않는다.
});
app.get('/', (req, res, next) => {
// ... next('route')면, 그 다음 라우터인 이쪽이 실행된다.
})

wrapAsync()

  • 모든 비동기 미들웨어 함수에서 wrapAsync()를 호출하면 모든 비동기 예외가 익스프레스 오류 처리기에서 종료된다

0개의 댓글