3

設定変数を node.js モジュールに渡すための推奨される方法は何ですか? 現在、module.exports 関数内に require 呼び出しを配置する必要がある次の設計を使用しています。これは、アプリのエントリ ポイント (別名 app.js、server.js...) で構成を1 回だけvar config = require('./myConfig')要求するという考え方であるため、どこでも使用することを避けるためにそのように行われます。

// A module that needs configuration settings when required.

// Some requires here...
var sample_module1 = require('amodule');
var sample_module2 = require('another_module');


module.exports = function(config) {

var apiKey = config.apiKey; // Get api key from configuration.

// This require must be here because needs 'config' variable...
var apiCaller = require('../lib/api_caller.js')(apiKey);


// An exported function that also uses configuration settings.
exports.makeCall = function(callback) {

  // Get some settings from configuration.
  var text = config.welcomeText; 
  var appName = config.appName; 

  // Use apiCaller module...
  apiCaller.send(appName, text, function(e){
    if (e) { return callback(e); }
    return callback(null);
  });
}

...

return exports;
}

「../lib/api_caller.js」モジュールを使用するより良い代替手段があるかどうか疑問に思っています (リファクタリングなどにより)。

4

1 に答える 1

1

解決策の 1 つは、nconfなどを使用して、適切なファイルを適切なタイミングでロードすることです。特にあなたの場合、confプロジェクトのルートにdefault.json構成ファイルを含むフォルダーを作成します。次に、新しく作成されたファイルconfiguration.jsを活用するグローバルを作成できます。nconf

var nconf = require("nconf")
  , path = require("path")
  , environment;

nconf.argv().env("_");

environment = nconf.get("NODE:ENV") || "development";

nconf.file("default", path.resolve("config/default.json"));

module.exports = nconf.get

いくつかの構成を必要とする他のモジュールから、次のものを簡単に使用できます。

var conf = require('configuration.js')
conf('NODE_ENV') // print NODE_ENV

しかし、それはあなたが望まないものと非常に似ているように思えます。もう 1 つのオプションは、コンストラクターのようなものを使用することです。

var ApiCaller = require('../lib/api_caller.js');
var apiCaller = new ApiCaller({ some: 'parameter' });
apiCaller.doSomething();

「クラス」ApiCallerは次のようになります。

function ApiCaller(options){
  this.options = options;
}

Api.prototype.something = function(){
  this.options //my options
};
于 2013-08-12T18:35:13.520 に答える