Programing

Express.js에서 next ()를 사용하여 다음 미들웨어에 변수 전달

lottogame 2020. 6. 4. 07:48
반응형

Express.js에서 next ()를 사용하여 다음 미들웨어에 변수 전달


글쎄, 내 질문은 첫 번째 미들웨어에서 다른 미들웨어로 변수를 전달하고 싶었지만 이것을 시도했지만 " req.somevariable'정의되지 않은 것으로 지정되었습니다."


//app.js
..
app.get('/someurl/', middleware1, middleware2)
...

////middleware1
...
some conditions
...
res.somevariable = variable1;
next();
...

////middleware2
...
some conditions
...
variable = req.somevariable;
...

변수가 req아닌 객체에 연결하십시오 res.

대신에

res.somevariable = variable1;

있다:

req.somevariable = variable1;

다른 사람들이 지적했듯이 res.locals미들웨어를 통해 데이터를 전달하는 권장 방법입니다.


이것이 res.locals 객체의 목적입니다. 요청 오브젝트에서 직접 변수를 설정하는 것은 지원되거나 문서화되지 않습니다. res.locals 는 요청 수명 동안 상태를 유지합니다.

지역 주민

요청의 범위가 지정되어 해당 요청 / 응답주기 동안 렌더링 된보기 (있는 경우)에만 사용 가능한 응답 로컬 변수가 포함 된 객체입니다. 그렇지 않으면이 속성은 app.locals와 동일합니다.

이 특성은 요청 경로 이름, 인증 된 사용자, 사용자 설정 등과 같은 요청 레벨 정보를 노출하는 데 유용합니다.

app.use(function(req, res, next) {
    res.locals.user = req.user;  
    res.locals.authenticated = !req.user.anonymous;
    next();
});

다음 미들웨어에서 변수를 검색하려면 다음을 수행하십시오.

app.use(function(req, res, next) {
    if (res.locals.authenticated) {
        console.log(res.locals.user.id);
    }
    next();
});

모범 사례가와 같은 변수를 전달할 것이라고 생각하지 않습니다 req.YOUR_VAR. req.YOUR_APP_NAME.YOUR_VAR또는 을 고려할 수 있습니다 req.mw_params.YOUR_VAR.

다른 속성을 덮어 쓰지 않도록 도와줍니다.


때문 reqres두 개의 서로 다른 객체가.

추가 한 동일한 객체에서 속성을 찾아야합니다.


The trick is pretty simple... The request cycle is still pretty much alive. You can just add a new variable that will create a temporary, calling

app.get('some/url/endpoint', middleware1, middleware2);

Since you can handle your request in the first middleware

(req, res, next) => {
    var yourvalue = anyvalue
}

In middleware 1 you handle your logic and store your value like below:

req.anyvariable = yourvalue

In middleware 2 you can catch this value from middleware 1 doing the following:

(req, res, next) => {
    var storedvalue = req.yourvalue
}

As mentioned above, res.locals is a good (recommended) way to do this. See here for a quick tutorial on how to do this in Express.

참고URL : https://stackoverflow.com/questions/18875292/passing-variables-to-the-next-middleware-using-next-in-express-js

반응형