에러 처리를 미들웨어로 빼고 싶어서 같이 공부하는 칭구랑 해봤지만 나만 계속 떴던 500 Server error.. 에러처리 미들웨어에 대해 잘 알지 못해서 생긴 일이였어서 미들웨어에 대해 다시 기록해놔야겠다고 생각했다.
...
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);
})
에러처리 미들웨어는 매개변수가 err, req, res, next 4개로 이루어져있다.
모든 매개변수를 사용하지 않더라도 매개변수가 반드시 4개로 이루어져야한다!!
next 매개변수를 안쓰길래 뺐더니 계속 500 에러가 떴었다..
...
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')면, 그 다음 라우터인 이쪽이 실행된다.
})