Middleware는 Express 서버의 라이프 사이클에서 요청과 응답 중간에서 목적에 맞게 기능을 처리하는 함수이다. Express.js는 내장 Middleware를 제공 하기도 하지만, 사용자가 원하는 특정 작업을 수행하게 할 수 있게 사용자가 직접 Middleware를 정의 할 수 있다.
Middleware를 직접 정의 할 때는 3개의 인자를 받아야한다. 그리고 next()
함수를 통해 다음 middleware가 호출이 되어야 한다.
const myCustomMiddleware = async(req, res, next) => {
...
next()
}
req
: HTTP request 객체res
: HTTP response 객체next
: 다음 middleware 호출 함수Cunstom Middleware을 관리하기 위해 middleware 디렉토리를 만들고 auth.js 파일을 만든다.
const validateToken = async (req, res, next) => {
try {
const token = req.headers.authorization; // (1)
. . . // (2)
next(); // (3)
} catch (err) {
next(err);
}
};
const express = require("express");
const router = express.Router();
const { postController } = require("../controllers");
router.post("", postController.createPost);
// ㄴ 두 번째 인자로 실행할 Controller 넣어주기
module.exports = router;
기본 router에서 두번째 인자로 실행할 Controller을 넣어줬다면, Middleware을 추가 할 때는 두번째 인자로 Middleware 함수를 넣어준다. 그리고 세번째 인자로 실행할 Controller을 넣어주면 된다.
const express = require("express");
const router = express.Router();
import { validateToken } from '../middlewares/auth';
const { postController } = require("../controllers");
router.post("", validateToken, postController.createPost);
// ㄴ 두 번째 인자로 Middleware 함수, 세 번째 인자로 실행할 Controller
module.exports = router;
request
, response
, next
를 인자로 받아야 하며 next()
함수를 통해 다음 Middleware를 호출