본문 바로가기
Programming/Node.js

[Node.js] parameter가 있는 middleware

by SpiralMoon 2020. 3. 27.
반응형

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

 

반응형

댓글