요청과 응답 중간(사이)에 위치하여 미들웨어라고 불린다. 라우터와 에러 핸들러 또한 미들웨어의 일종이며, 요청과 응답 중간에서 특정 작업을 수행하기 위해 사용된다.
Express로 만든 웹 애플리케이션에 전역으로 적용되는 미들웨어이다.
app 객체의 app.use()와 app.METHOD() 함수를 사용해서 미들웨어를 app 객체 인스턴스에 바인딩한다.
즉, app.use()와 app.METHOD() 함수를 이용해서 미들웨어를 등록하고 사용할 수 있다.
사용 방법 | 설명 |
---|---|
app.use(미들웨어) | 모든 요청에서 해당 미들웨어를 사용 |
app.use('/path', 미들웨어) | 특정 경로로 접근할 때 미들웨어를 사용 |
app.METHOD('/path', 미들웨어) | 특정 HTTP 메소드에 특정 경로로 접근할 때 미들웨어를 사용 |
특정 라우터에만 적용되는 미들웨어이다. express.Router()로 만든 라우터 인스턴스에 바인딩된다. 즉, 특정 경로로 요청이 들어오면, 실행되는 미들웨어이다.
애플리케이션 레벨 미들웨어와 같은 방식(router.use()와 router.METHOD())으로 미들웨어를 등록하고 사용할 수 있다.
// app.js
const express = require('express');
const app = express();
const userRouter = require('./routes/users');
app.use('/users', userRouter);
// users.js
const express = require('express');
const router = express.Router();
// 라우터 레벨 미들웨어
router.use((req, res, next) => {
console.log('This is a router-level middleware');
next();
});
// 라우터에 미들웨어 적용
router.get('/users/:id', (req, res) => {
res.send('This is the response for the /users route in the router.');
});
미들웨어나 라우터에서 에러가 발생하면 실행되는 미들웨어이다. 에러 핸들링과 관련된 로직을 수행하여 사용자에게 에러 페이지를 제공할 수 있다.
항상 4개의 인자가 필요하다
app.use(function(err, req, res, next) {
console.error(err.stack);
res.status(500).send('Something broke!');
});
Express 자체에서 제공하는 기본적인 미들웨어로, 애플리케이션에서 기본적인 기능을 수행한다.
app.use(express.json());
Express 외부에서 개발자들이 만든 후 제공하는 미들웨어 패키지이다. 추가적인 기능을 제공하거나 특정 작업을 수행하기 위해 사용된다.
morgan(로그 기록), Helmet(보안 헤더 설정) 등이 있다.
https://expressjs.com/ko/guide/writing-middleware.html
https://inpa.tistory.com/entry/EXPRESS-%F0%9F%93%9A-%EB%AF%B8%EB%93%A4%EC%9B%A8%EC%96%B4-%F0%9F%92%AF-%EC%9D%B4%ED%95%B4-%EC%A0%95%EB%A6%AC
https://cotak.tistory.com/84