request
를 보낸 데이터가 미들웨어를 거치고 난 뒤에 앱으로 전달된다.
모든 요청에 대해 공통적인 처리를 하고 싶은 경우
=> 미들웨어를 통해 로깅
및 사용자 인증
을 관리
=> 중복되는 코드를 줄일 수 있음
로깅
모든 요청에 대해서 로그를 남겨 확인하고 싶은 경우
사용자 인증
승인된 사용자만 API를 접근할 수 있게 만들고 싶을 경우
웹 서버의 요청/응답에 대해 공통적으로 관리가 가능
브라우저가 보낸 데이터를 쉽게 사용할 수 있게 바꿔주는 경우 ex) body parser, cookie parser
다른 웹 서버
Apache
, Nginx
=> 모듈이라는 개념을 가지고 있음
https
모듈 추가모듈
추가Express.js
app.use(express.urlencoded({ extended: false }));
app.use(express.json());
form-urlencoded
라는 규격의 body 데이터를 손쉽게 코드에서 사용할 수 있게 도와주는 미들웨어JSON
이라는 규격의 body 데이터를 손쉽게 코드에서 사용할 수 있게 도와주는 미들웨어app.use((req, res, next) => {
// 필요한 코드
});
req
: 요청(Request)에 대한 정보가 담겨있는 객체입니다.res
: 응답(Response)을 위한 기능이 제공됩니다.next
: 다음 스택으로 정의된 미들웨어를 호출합니다.Request 로그 남기는 미들웨어 작성
app.use((req, res, next) => {
console.log('Request URL:', req.originalUrl, ' - ', new Date());
next();
});
bodyparser
와 router
를 연결하는 사이에 작성되어야 함
app.use((req, res, next) => {
console.log('첫번째 미들웨어');
next();
});
app.use((req, res, next) => {
console.log('두번째 미들웨어');
next();
});
app.use((req, res, next) => {
console.log('세번째 미들웨어');
next();
});
// 첫번째 미들웨어
// 두번째 미들웨어
// 세번째 미들웨어
순차적으로 미들웨어를 통과하고 중간에 응답을해서 종료가 되거나 다음 미들웨어로 넘어가서 터미널에 첫번째 미들웨어라는 로그부터 차례대로 세번째 미들웨어까지 출력
하지만 중간에 미들웨어에 next()
가 실행되지 않으면 다음 미들웨어는 실행되지 않음
// 상품 목록 조회 API
router.get("/goods",
(req, res, next) => {
console.log('/goods 미들웨어');
next();
},
(req,res) => {
res.status(200).json({goods})
});
app.use(Middleware)
: 모든 요청에서 미들웨어가 실행된다.
app.use(’/api’, Middleware)
: api로 시작하는 요청에서 미들웨어를 실행한다.
app.post(’/api’, Middleware)
: api로 시작하는 POST 요청에서 미들웨어를 실행한다.