미들웨어는 컴퓨터 제작 회사가 사용자의 특정한 요구대로 만들어 제공하는 프로그램으로, 운영 체제와 응용 소프트웨어의 중간에서 조정과 중개의 역할을 수행하는 소프트웨어이다.
라고 사전에서 설명하고 있다.
Node.js 에서 미들웨어는 위와 비슷한 의미로 요청과 응답 중간 사이에서 목적에 맞게 기능을 하는 함수라고 할 수 있다.
미들웨어는 app.use 와 함께 사용되고, 매개변수로 req, res, next 를 갖는다.
app.use((req, res, next) => {
console.log('모든 요청에서 다 실행 됩니다.')
next();
});
app.get('/', (req, res, next) => {
console.log('GET 요청에서만 실행됩니다.');
next();
}, (req, res) => {
throw new Error('에러는 에러 처리 미들웨어로 갑니다.');
});
app.use((req, res, next) => {
console.error(err);
res.status(500).send(err.message); // HTTP 상태 코드 지정
})
next 는 다음 미들웨어로 넘어가는 함수로서 next() 가 없다면 다음 미들웨어가 실행되지 않는다.
책에서 미들웨어는 app.use와 함께 사용되고 app.use(미들웨어) 라고 기재되어 있었는데,
위에서 get 요청에서 미들웨어를 2개를 처리하니 app.get 은 app.use 가 아니지 않나..? 라는 생각이 들어서 헷갈렸다.
찾아보니 app.use 는 get 이나 post나 patch 등 모든 요청에서 미들웨어를 실행하는 것이고,
app.get은 get 요청에서만 미들웨어를 실행하는 것이었다.
위의 에러 처리 미들웨어는 매개변수가 err, req, res, next 로, 모든 변수를 사용하지 않더라도 꼭 매개변수가 4개여야 한다.