2012-01-12 8 views
21

私はロードする必要があるmodule.jsを持っています。必要な作業をするためにobjectX;node.jsにファイルを要求し、要求メソッドで引数を渡すが、モジュールには渡す方法はありませんか?

node.jsが提供するrequireメソッドのobject.jsに、どのようにobjectXを渡しますか?

おかげ

// my module.js 
objectX.add('abc'); 
// error: objectX is undefined 

私は多くの時間がかかるだろうので、すべての私のクラスを変更することなく、それを行うための方法をたいと思います...そして、彼らは道には、クライアント側のための良好な性能を持ってい。 (私はクライアントファイルをserverfiles ***と混ぜます)

答えて

45

書き込むモジュールは、1つの関数を書き出すことができます。モジュールが必要なときは、初期化引数で関数を呼び出します。この関数は、必要なモジュールの変数に配置する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

いくつかのinitメソッドをエクスポートし、必要な直後にobjectXをパラメータとして渡すのはどうですか?

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

私はこのようなクラスがたくさんあります。 ..}); "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); 
}; 

そして、このようにそれを必要とする:t.add({...クラス:

var TM = require('./TestModule.js').init(20); 
TM.sayHi(); 
関連する問題