web-dev-qa-db-ja.com

node.jsのファイルを要求し、リクエストメソッドで引数を渡す方法は、モジュールではありませんか?

ロードする必要があるmodule.jsがあります。動作するためにはobjectXが必要です。

Node.jsが提供するrequireメソッドで、objectXをmodule.jsに渡すにはどうすればよいですか?

ありがとう

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

私はすべてのクラスを変更する必要がなく、それを行う方法を望んでいます。これは、時間がかかるためです。クライアント側にとっては、パフォーマンスが優れています。 (私はクライアントファイルとサーバーファイルを混合します***)

23
Totty.js

作成したモジュールは、単一の関数をエクスポートできます。モジュールが必要な場合は、初期化引数を指定して関数を呼び出します。その関数は、必要なモジュールの変数に配置するオブジェクト(ハッシュ)を返すことができます。言い換えると:

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());

math.js:

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

「init」メソッドでチェーンすることにより、実際にエクスポートされたオブジェクトの変更を回避できます(任意の名前を付けます)。

モジュール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();
14
ChrisCantrell

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

var module = require('moduleJS');
module.init(objectX)
2
ladar