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;
...
이것이 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
""가 아닌 ""res
.
대신
res.somevariable = variable1;
가지고 있다:
req.somevariable = variable1;
res.locals
는 미들웨어를 통해 데이터를 전달하는 권장 방법입니다.
라고 하는 를 건네주는 req.YOUR_VAR
을 고려하는 것이 .을 검토하는 것이 좋을 것 같습니다.req.YOUR_APP_NAME.YOUR_VAR
★★★★★★★★★★★★★★★★★」req.mw_params.YOUR_VAR
.
다른 Atribut의 덮어쓰기를 방지하는 데 도움이 됩니다.
및인 패턴은 요청 """에 값을 입니다.req
.
이 경우 다음과 같은 미들웨어가 있어야 합니다.
app.use(function (req, res, next) {
req.someVariable = 123;
next();
});
app.use(function (req, res, next) {
console.log("The variable is", req.someVariable);
next();
});
이 패턴에는 많은 일반적인 사용 사례가 있으며, 익스프레스 커뮤니티에서는 표준적인 사용 방법입니다.예를 들어 다음과 같습니다.
- express.json은 express와 함께 제공되며 이전에는 모든 요구 해석에 대해 동일한 패턴을 따르는 본문 파서의 일부였습니다.
- 멀티파트 데이터 해석에 사용되는 멀티터
- express-contract의
- express-validator(코드 참조)
- 급행열차의
- 익스프레스 사용자 에이전트
- 익스프레스 피노의 매개에 의한
- 익스프레스 분얀의 매개에 의한
현재 가장 높은 투표율을 보이고 있는 답변이 잘못 권장되고 있는 경우res.locals
문서 오독에서 비롯된 것 같습니다.그 때문에, 이 문제에 대한 통상적인 어프로치가 아닌 이유에 대해 설명하겠습니다(특별히 해롭지도 않습니다).
문서
★★★★★★★의 res.locals
현재 시대에 뒤떨어진 문서를 예로 들 수 있습니다.
요청에 대한 응답 로컬 변수를 포함하는 개체. 따라서 요청/응답 주기 동안 렌더링된 보기(있는 경우)에만 사용할 수 있습니다.그렇지 않으면 이 속성은 app.locals와 동일합니다.
이 속성은 요청 경로 이름, 인증된 사용자, 사용자 설정 등의 요청 수준 정보를 노출하는 데 유용합니다.
.「 。res.locals
는 "해당 요청 중 렌더링된 뷰"에만 사용할 수 있는 변수입니다(추가).
이 바로 게거그 that의 말이다.res.locals
련되되res.render
로컬 액세스뿐만 아니라 일부 데이터가 포함된 템플릿 파일을 렌더링합니다.이는 v2 문서에서 더 명확했으며, 현재 Express 문서를 보다 명확하게 업데이트했습니다.
res.render로 렌더링된 템플릿에서 액세스할 수 있는 변수를 설정하려면 이 속성을 사용합니다.res.locals에 설정된 변수는 단일 요청-응답 사이클 내에서 사용할 수 있으며 요청 간에 공유되지 않습니다.
요청 간 템플릿 렌더링에 사용할 로컬 변수를 유지하려면 대신 app.locals를 사용하십시오.
이 속성은 요청 경로 이름, 인증된 사용자, 사용자 설정 등의 요청 수준 정보를 응용 프로그램 내에서 렌더링되는 템플릿에 노출할 때 유용합니다.
(강조 추가)
가이드
의 req
Writing Middleware에 관한 가이드에 표준 접근법이 기재되어 있습니다.이 가이드는 다음과 같습니다.
다음으로 "requestTime"이라는 미들웨어 함수를 만들고 requestTime이라는 속성을 요청 오브젝트에 추가합니다.
const requestTime = function (req, res, next) { req.requestTime = Date.now() next() }
이 질문에 대한 답변에서 이 내용이 언급되었을 때 한 사용자는 다음과 같이 대답했습니다.「이것은, res.locals 가 추가되기 전의 방식입니다.오래된 docs일 수 있습니다.res.locals는 이 문제에 특화된 네임스페이스입니다.」
그러나 이는 코드베이스의 역사와는 일치하지 않습니다.v2부터 로컬이 존재해 왔습니다.v2보다 훨씬 이전 버전입니다. express.json
이 되어 있기 에 실제로 이 하는 것이 입니다.그 시점에서, 가치를 보존하는 것이 정말로 옳았다면, 베바이어를 변경하는 것이 의미가 있었을 것입니다.res.locals
.
클로징 노트
코멘트를 썼지만 간과된 @real_ate에게 외칩니다.
그 이유는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
}
위에서 설명한 바와 같이 res.locals를 사용하는 것이 좋습니다(권장).Express에서 이 작업을 수행하는 방법에 대한 간단한 튜토리얼은 여기를 참조하십시오.
언급URL : https://stackoverflow.com/questions/18875292/passing-variables-to-the-next-middleware-using-next-in-express-js
'it-source' 카테고리의 다른 글
MySQL의 카디널리티란? (0) | 2022.12.19 |
---|---|
CodeIgniter의 머리글 및 바닥글 (0) | 2022.12.19 |
Express.js의 res.send와 res.json의 차이 (0) | 2022.12.19 |
PHP 함수 주석 (0) | 2022.12.19 |
아포스트로피로 시작하는 테이블을 삭제하는 방법 (0) | 2022.12.19 |