2013-05-28 2 views
3

필자는 필요한 경우 여러 모듈에 걸쳐 조각난 서비스를 구축 중입니다. 모든 모듈에서 라우터의 "요청"변수에 액세스해야합니다. (일반적으로 변수를 전달하는 다른 스레드에 제안되었다)모든 모듈에 변수 전달하기

내 현재 솔루션은 필요한 각 모듈에 전달하는 것이다

VAR a_module = 요구 ('./ a_module') (REQ) ;

그리고 기능과 같은 각 모듈 수출 :

module.exports = 기능 (REQ) { ... }

하지만 장황를 갖는 것을 포함하는 것은 수출하는 내 모듈을 함수로 사용하고 내 보낸 함수의 범위에서이 변수에 대한 액세스 만 있습니다. 이상적으로 필요한 전체 모듈에서 변수에 액세스 할 수 있기를 원합니다.

내가 누락 된 다른 우아한 방법이 있습니까? req 변수를 전체 애플리케이션에서 전역 변수로 선언하는 것과 마찬가지로?

+0

Express 또는 일반 NodeJS를 사용하고 있습니까? –

+0

예 익스프레스에 있습니다 – gwendall

+1

노드가 PHP와 달리 동일한 프로세스에서 비동기 적으로 여러 요청을 처리합니다. 'req'를 전역으로 설정하고 여러 요청을 동시에 처리하면'req'가 clobbered 될 것입니다. 그래서 그들은 일정하고 보편적 인 경우를 제외하고 전역 변수를 사용해야한다고 생각하지 않습니다. –

답변

3

이 질문은 답변이 아닌 의견을 요청할 것이므로 스택 오버플로에 적합하지 않지만 여기 $ 0.02입니다.

요청 개체에 액세스해야하는 너무 많은 모듈을 작성한 적이 있는지 물어보십시오. 네가 가진 것 같지 않아. 당신이 작성해야하는 것은 그들이 필요로하는 특정 데이터를 가져 오는 기능입니다. 이 모든 기능은 거의 모든 요청을 필요로하지 않습니다. 얼마나 많은 사람들이 실제로 모든 HTTP 헤더에 액세스해야합니까? 프로그램을 도메인 객체/데이터에 대한 일련의 작업으로 생각하십시오. 예를 들어, 사용자 계정 레코드를 가져 와서 일반 사용자로부터 관리자에게 알리는 기능이있을 수 있습니다. 기능 요구 사항은 모두 사용자 계정입니다. HTTP 요청 객체와 결합되어서는 안됩니다.

몇 가지 정확한 매개 변수를 취하고 유용한 매개 변수를 사용하는 깨끗하게 분리 된 함수를 작성하십시오. 이를 "느슨한 커플 링 (loose coupling)"이라고합니다. 그런 다음 관련 기능 그룹을 모듈로 구성하십시오. 이를 "응집력"이라고합니다. 그런 다음 "glue"코드를 사용하여 HTTP req 객체에서 필요한 매개 변수를 추출한 다음이 함수에 인수로 전달합니다. 이러한 동일한 기능은 명령 행 인터페이스 또는 다른 비 HTTP 인터페이스에서 작동해야합니다. 그들은 현재의 HTTP req 객체에 대해 알고있는 모든 모듈의 모든 라인에서 열매를 맺는 대신 코드를 작성하면 더 쉽게 이해하고, 테스트하고, 오래 사용할 수 있습니다.

+0

아주 좋은 대답, 감사합니다! – gwendall