Programming/Node.js
[Node.js] parameter가 있는 middleware
SpiralMoon
2020. 3. 27. 23:44
반응형
parameter가 있는 middleware
매개변수를 사용할 수 있는 미들웨어를 만들어보자.
router와 middleware의 기본 형태
router.get('/example', function (req, res, next) {
...
});
NodeJS에서는 라우터를 구성할 때 위 소스코드처럼 경로를 지정하고 해당 경로에서 트리거 될 미들웨어를 작성한다.
// 미들웨어의 기본 형태
function (req, res, next) {
}
// 파라미터를 스킵한 미들웨어의 형태
function () {
}
미들웨어는 항상 기본 파라미터로 request, response, next 개체들을 받거나 스킵할 수 있는데, 개발자가 원하는 파라미터를 따로 선언할 수 없다는 문제점이 있다.
parameterized middleware
미들웨어는 request, response, next를 필요로 하는 함수 타입이므로
function customMiddleWare(parameter) {
return function (req, res, next) {
...
}
}
매개변수를 사용할 수 있는 미들웨어를 만들 때는 위 소스코드처럼 미들웨어를 리턴하는 함수를 만들면 된다.
예시
그렇다면 라우터를 호출한 클라이언트의 앱 버전이 API를 이용가능한 최소버전 이상인지 체크하는 미들웨어를 만들어보자.
function minApp(minVersion) {
return function (req, res, next) {
const clientVersion = req.headers['appVersion'];
// 호출 가능한 최소 버전보다 앱버전이 낮은 경우
if (clientVersion < minVersion) {
next(new Error("Invalid app version!"));
return;
}
next();
}
}
위 처럼 함수를 만들고
// minApp(1)
router.get('/example', minApp(1), function (req, res, next) {
...
});
이렇게 적용시키면 된다. minApp(1)를 사용한 것 처럼 미들웨어에 파라미터를 정의할 수 있게 된 것이다.
관련 문서
Creating a expressjs middleware that accepts parameters
I am trying to create a middleware that can accept parameters. How can this be done? example app.get('/hasToBeAdmin', HasRole('Admin'), function(req,res){ }) HasRole = function(role, req, res, ...
stackoverflow.com
반응형