2013-04-05 3 views
2

node.js를 배우고 있으며 다음 두 가지 경우에 어떤 차이가 있는지 관심이 있습니다. I.E. 나는 많은 모듈과 서브 모듈에서 전달되어야 할 변수 인 myvar (db 연결 또는 단지 상수 문자열 "test"와 같은)을 가지고있다.Node.js 모듈에 변수 전달 vs 모든 모듈 함수에 변수 전달

첫 번째 경우. 서브 모듈이 동일한 여러 모듈에 사용하는 경우이 경우

var option 
    , submodule 
    , module1 = {}; 
module1.func = function(){ 
    ... 
    submodule.func(); 
    ... 
    var something = option; 
    ... 
} 
module.exports = function(opts){ 
    option = opts; 
    submodule = require('./submodule')(opts); 
    return module1; 
} 

:

submodule.js :

var option 
    , submodule = {}; 
submodule.func = function(){ 
    ... 
    var something = option; 
    ... 
} 
module.exports = function(opts){ 
    option = opts; 
    return submodule; 
} 

module1.js 그건 PARAM로서 해당 변수에 동의 모듈 만들기 myvar 값 (즉 2 모듈) 서브 모듈의 module.exports 함수는 2 회 호출됩니다. node.js에서는 "모듈이 처음로드 된 후 캐시됩니다"라고 말합니다. 그리고이 모듈이 캐싱되었는지 아닌지 이해할 수 없습니다.

또 다른 경우 : 그 myvar은 모듈 기능에 매개 변수로 전달할 수 있습니다.

submodule.js :

function func(option){ 
    ... 
    var something = option; 
    ... 
}; 
exports.func = func; 

module1.js :

var submodule = require('./submodule'); 
function func(option){ 
    ... 
    submodule.func(option); 
    ... 
    var something = option; 
    ... 
}; 
exports.func = func; 

그래서 질문은 : 이 이가지 경우 사이에 어떤 차이가 있나요하거나 동일 그래서 코드는 모양을 ?

+0

[의존성 주입] (http://stackoverflow.com/questions/130794/what-is-dependency-injection)에 대해 묻는 것처럼 들리 겠지만, "변수를 모듈로 전달하는 것 ". – ekillaby

답변

3

여기에 무엇을 묻고 있는지 정확히 모르겠지만 모듈에 값을 전달해야한다면 매개 변수를 허용하는 함수를 내 보내야합니다. 모듈이 캐시되었다고 말하면 모듈이 한 번만 초기화된다는 의미입니다. 모듈을 객체로 생각하십시오.

var a = 1; 
var b = 2; 
console.log("init!"); 

module.exports.test = function(){ 
     console.log("this is a function!"); 
} 

여기에서 a, b 및 첫 번째 로그는 한 번만 실행됩니다. 이 때 모듈이 요청되고 캐시됩니다. 당신이 할 때

var example = require("module") 

결코 생성되지 않으면 a, b를 초기화하고 로그 메시지를 작성합니다. 이미 만들어진 경우에는 내 보낸 항목에 대한 참조 만 제공합니다. 때마다 당신은 전화 :

example.test() 

그것은 출력 : this is a function!

그러나 당신은 A, B, 다시 첫 번째 로그 실행을받지 않습니다.

해당 개체의 개인 정적 변수로 내 보내지 않은 모든 문을 생각해보십시오.

app.js

var s = require("./sample"); 
var y = require("./sample"); 
s.test(); 
y.test(); 
s.test(); 
console.log("finished"); 

sample.js

var a = 1; 
var b = 2; 
console.log("init!"); 
function test() { 
    console.log("here! " + a); 
    a++; 
} 
exports.test = test; 

이 모든 출력 :

여기서 완전히 다른 동작 예이다

init! 
here! 1 
here! 2 
here! 3 
finished 

D 이게 전부 도움이되는 건가요?

+0

"static"vars를 모듈로 전달하고 각 함수에 전달하는 것의 차이점에 대해 묻습니다. 필자가 요구하는 이유는 require ('./ submodule')의 매개 변수화 된 module.exports를 사용하면 module.export의 함수를 여러 번 (필요할 때마다) 호출하기 때문입니다. – m03geek

+0

그게 내가 말하는거야. 내보내기는 함수 참조 일 뿐이지 만 내 보낸 값 외부에서 선언 된 "정적"을 통해 닫을 수 있습니다. – devshorts

+0

확인. 그래서 당신은 짧은 대답을 줄 수 있습니까 (자신의 견해) :이 경우 (예/아니오)간에 어떤 차이가 있습니까? 어느 것이 당신이 선호합니까? 감사. – m03geek