이번 포스팅은 전 포스팅인 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 |