글쎄, 내 질문은 첫 번째 미들웨어에서 다른 미들웨어로 변수를 전달하고 싶었지만 이것을 시도했지만 ” 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
.
다른 속성을 덮어 쓰지 않도록 도와줍니다.
2020 년 5 월 31 일 업데이트
res.locals 는 당신이 찾고있는 것입니다. 객체는 요청 범위입니다.
요청의 범위가 지정된 응답 로컬 변수를 포함하는 객체로, 해당 요청 / 응답주기 동안 렌더링 된 뷰에서만 사용할 수 있습니다 (있는 경우). 그렇지 않으면이 속성은 app.locals와 동일합니다.
이 특성은 요청 경로 이름, 인증 된 사용자, 사용자 설정 등과 같은 요청 레벨 정보를 노출하는 데 유용합니다.
답변
때문 req
와 res
두 개의 서로 다른 객체가.
추가 한 동일한 객체에서 속성을 찾아야합니다.
답변
트릭은 매우 간단합니다. 요청주기는 여전히 아주 살아 있습니다. 임시 변수를 만드는 새 변수를 추가하면됩니다.
app.get('some/url/endpoint', middleware1, middleware2);
첫 번째 미들웨어에서 요청을 처리 할 수 있으므로
(req, res, next) => {
var yourvalue = anyvalue
}
미들웨어 1에서는 다음과 같이 논리를 처리하고 값을 저장합니다.
req.anyvariable = yourvalue
미들웨어 2에서는 다음을 수행하여 미들웨어 1에서이 값을 포착 할 수 있습니다.
(req, res, next) => {
var storedvalue = req.yourvalue
}