본문 바로가기
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

 

반응형

댓글