我正在使用node.js + express.js + everyauth.js。我已经将所有我的Everyauth逻辑移到了模块文件中
var login = require('./lib/everyauthLogin');
在其中,我使用密钥/秘密组合加载我的oAuth配置文件:
var conf = require('./conf'); ..... twitter: { consumerKey: 'ABC', consumerSecret: '123' }
这些代码对于不同的环境是不同的-开发/登台/生产,因为回调是针对不同的URL的。
曲 如何在环境配置中设置它们以过滤所有模块,或者可以将路径直接传递到模块中?
在环境中设置:
app.configure('development', function(){ app.set('configPath', './confLocal'); }); app.configure('production', function(){ app.set('configPath', './confProduction'); }); var conf = require(app.get('configPath'));
传递
app.configure('production', function(){ var login = require('./lib/everyauthLogin', {configPath: './confProduction'}); });
?希望有道理
我的解决方案
使用加载应用
NODE_ENV=production node app.js
然后设置config.js为功能而不是对象
config.js
module.exports = function(){ switch(process.env.NODE_ENV){ case 'development': return {dev setting}; case 'production': return {prod settings}; default: return {error or other settings}; } };
然后按照Jans解决方案加载文件并创建一个新实例,如果需要,我们可以传递一个值,这种情况下process.env.NODE_ENV是全局的,因此不需要。
process.env.NODE_ENV
var Config = require('./conf'), conf = new Config();
然后,我们可以像以前一样完全访问config对象的属性
conf.twitter.consumerKey