一尘不染

Node.js设置环境特定的配置以与Everyauth一起使用

node.js

我正在使用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'});
});

?希望有道理


阅读 346

收藏
2020-07-07

共1个答案

一尘不染

我的解决方案

使用加载应用

NODE_ENV=production node app.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是全局的,因此不需要。

var Config = require('./conf'),
    conf = new Config();

然后,我们可以像以前一样完全访问config对象的属性

conf.twitter.consumerKey
2020-07-07