将设置变量传递给node.js模块的推荐方法是什么?
目前我正在使用以下设计,需要在module.exports函数中放置require调用。这样做是为了避免在任何地方使用var config = require('./myConfig')
,因为这个想法是在app入口点(也就是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'模块(通过重构等)
答案 0 :(得分: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();
“class”ApiCaller
的样子:
function ApiCaller(options){
this.options = options;
}
Api.prototype.something = function(){
this.options //my options
};