2012-01-12 4 views
21

로드해야하는 module.js가 있습니다. 필요로하는 일을 위해서 objectX;node.js에서 파일을 요구하고 요청 메소드에서는 인수를 전달하지만 모듈에서는 전달하지 않는 방법은 무엇입니까?

node.js에서 제공하는 require 메소드에서 objectX를 module.js로 전달하려면 어떻게해야합니까?

감사

// my module.js 
objectX.add('abc'); 
// error: objectX is undefined 
나는 시간이 많이 걸릴 것 때문에 내 모든 클래스를 변경하지 않고, 그것을 할 수있는 방법을 싶습니다 ... 그리고 그들은 방법이있다

는 클라이언트 측에 대한 좋은 성능을 가지고 . (나는 클라이언트 파일을 서버 파일과 혼합합니다 ***)

답변

45

작성한 모듈은 단일 기능을 내보낼 수 있습니다. 모듈이 필요할 때 초기화 인수를 사용하여 함수를 호출하십시오. 이 함수는 필요한 모듈에서 변수에 배치 한 Object (해시)를 반환 할 수 있습니다.

main.js

var initValue = 0; 
var a = require('./arithmetic')(initValue); 
// It has functions 
console.log(a); 
// Call them 
console.log(a.addOne()); 
console.log(a.subtractOne()); 

arithmetic.js :

module.exports = function(initValue) { 
    return { 
    addOne: function() { 
     return initValue + 1; 
    }, 
    subtractOne: function() { 
     return initValue - 1; 
    }, 
    } 
} 
+0

질문을 업데이트했습니다 : 모든 파일을 변경할 필요가 없습니다. –

+1

글쎄, 나는 그것을 말하는 것이 싫지만 objectX는 글로벌해야한다. 당신의 호출 파일에서'global.objectX = "hi"' – kgilpin

2

몇 가지 초기화 방법을 내보내고 필요한 바로 다음에 매개 변수로 objectX를 전달하는 것과 같은 해결 방법은 무엇입니까?

var module = require('moduleJS'); 
module.init(objectX) 
+0

나는 한이처럼 클래스의 많은 : t.add ({... 클래스. ..}); 그러나 "t"는 정의되지 않았습니다. 어떻게 든 통과해야 모듈로 "t"가 필요합니다. 질문에 몇 가지 정보를 추가했습니다. –

14
당신은 "초기화"방법에 체인에 의해 실제 수출 객체를 변경하는 것을 방지 할 수

(그것에게 당신이 어떤 이름을 말하면 필요).

모듈 TestModule.js :

var x = 0; // Some private module data 

exports.init = function(nx) { 
    x = nx; // Initialize the data 
    return exports; 
}; 

exports.sayHi = function() { 
    console.log("HELLO THERE "+x); 
}; 

그리고는 다음과 같이 그것을 필요 :

var TM = require('./TestModule.js').init(20); 
TM.sayHi(); 
관련 문제