3

将设置变量传递给 node.js 模块的推荐方法是什么?目前我正在使用以下设计,需要在 module.exports 函数中放置 require 调用。这样做是为了避免var config = require('./myConfig')在任何地方使用,因为这个想法是在应用程序入口点(aka app.js,server.js ...)中只需要一次配置

// 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

一种解决方案可能是使用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

但这听起来与您不想要的非常相似。另一种选择是使用类似构造函数的东西:

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 回答