- node.js는 싱글 스레드이기 때문에, 에러 처리에 민감해야 함
const express = require('express');
const app = express();
app.set('port', process.env.PORT || 3000);
app.use((req, res, next) => {
console.log("모든 요청에서 실행");
next();
}, (req, res, next) => {
throw new Error('에러가 났음')
}
)
- 위의 예시처럼 express 자체로 에러처리를 할 경우, 브라우저에 그대로 노출이 되어 보안상 위협을 받게되므로 반드시 에러 처리는 커스텀 에러 처리 미들웨어를 해줘야 함.
- 에러 처리 미들웨어를 만들기 위해서는 모든 매개변수를 사용하지 않더라도 매개변수가 err, req, res, next로 반드시 4개가 존재해야함.
// 에러 처리 미들웨어
app.use((err, req, res, next) => {
console.log(err);
res.send('에러났지만 나만 볼 수 있다');
});
-
위와 같이 에러 처리 미들웨어를 작성하면 브라우저에서는 '에러났지만 나만 볼 수 있다' 메세지만 확인 할 수 있고, 콘솔에서는 개발자가 에러를 확인할 수 있음.
-
JS는 위에서부터 아래로 순서대로 실행되므로 에러 처리 미들웨어를 마지막에 작성.
- 공통 미들웨어: 모든 라우트에서 사용
- 범위가 좁은 라우트: path variable을 사용
- 범위가 넓은 라우트: query String을 사용
- 에러 처리 미들웨어