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
.
다른 속성을 덮어 쓰지 않도록 도와줍니다.
때문 req
와 res
두 개의 서로 다른 객체가.
추가 한 동일한 객체에서 속성을 찾아야합니다.
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.
'Programing' 카테고리의 다른 글
MacOS에서 Boost를 어떻게 설치합니까? (0) | 2020.06.04 |
---|---|
gulp로 디렉토리를 재귀 적으로 복사하는 방법은 무엇입니까? (0) | 2020.06.04 |
HashSet과 HashMap의 차이점은 무엇입니까? (0) | 2020.06.04 |
Python-단어가 문자열에 있는지 확인 (0) | 2020.06.04 |
매일 오후 10시에 cron을 한 번 실행하는 방법 (0) | 2020.06.04 |