2014-11-19 3 views
0

요청 객체가 일반적으로 "req"로 표시된 이유는 응용 프로그램 수명주기 동안 동일하게 유지됩니까? function (req, res, next)와 같은 서명으로 콜백에서이 변수를 볼 수 있습니다. req.user와 같은 해당 req 객체에 변수를 첨부하면 해당 사용자 객체가 응용 프로그램 전체에 존재하는 것 같습니다. 왜?Node.js Express app - 요청 객체

app.use와 마찬가지로 사실입니까?

app.use(function (request, response, next) { 
    request.user= user; 
    next(); 
}); 

답변

3

"응용 프로그램 수명주기 전반"과 동일하지는 않지만 미들웨어 스택 전체에서 동일합니다. Express는 Connect를 기반으로하며 connect는 "미들웨어 스택"이라는 개념을 도입합니다. 요청/응답으로 무언가를 수행하고 미들웨어의 다음 계층으로 전달할 수있는 기능을 등록합니다. "스택"의 모든 기능은 동일한 요청/응답에서 작동하지만 새로운 요청마다 요청/응답 객체의 새 인스턴스가 생성됩니다.

기본적으로, 대답은

2

요청 객체가 요청 라이프 사이클이 아닌 애플리케이션 라이프 사이클 throughtout 동일합니다 "Connect이 방식으로 작동하도록 설계되어 있기 때문에 그것의"입니다.
예 : 당신은 순서대로 두 가지 기능 authenticateUserController.profile를 호출 명시 경로 /profile에 대한 요청이 이제 때마다

app.get("/profile", authenticate, UserController.profile); 

(임의의 숫자 일 수)이 미들웨어와 같은 경로를 가지고있다.
각 함수에 세 개의 인수를 전달합니다. req, res, next.
그러나 첫 번째 함수가 실행을 완료했는지 어떻게 알 수 있습니까? next 콜백을 사용합니다. 따라서 authenticatenext()을 호출하면 함수 실행이 완료되었음을 알게되고 동일한 인수를 사용하여 UserController.profile을 호출합니다.

req은 개체이므로 모든 콜백에 동일한 req 개체가 전달되므로 개체에서 변경 한 사항은 해당 요청에 대한 모든 미들웨어/콜백 익스프레스 통화에서 사용할 수 있습니다.

이렇게 사실인가요?

아니요, 라우트 메소드에도 해당됩니다. 라우트 메소드는 라우트가 일치 할 때만 호출되며, app.use 미드웨어가 각 요청에 대해 호출됩니다.