2017-08-11 254 views
1

我的问题涉及到an old answer given on this question,但只做了很小的修改。使用app.get('env')设置特定于环境的配置

我会尽量保持简单。

想我的文件夹结构如下

|-- controllers 
    |-- File.js 
    |-- and many more... 
|-- routes.js 
|-- app.js 
|-- config.js 
|-- env.json (same as one in the old answer) 

相关文件包含

app.js

const routes = require('./routes'); 

app.set('env', process.env.NODE_ENV || 'production'); // set the environment 
app.use('/', routes); 

routes.js

const FileController = require('./controllers/File'); 

let router = require('express').Router(); 

router.get('/files', FileController.getFiles); 

// ... 

module.exports = router; 

控制器/ File.js

const config = require('../config'); 

exports.getFiles = (req, res, next) => { 
    // I would like to use the environment-specific (that was set in app.js) config here 
    console.log(config.facebook_app_id); 
}; 

// ... 

config.js

const env = require('env.json'); 

/*exports.config = function() { 
    var node_env = process.env.NODE_ENV || 'development'; 
    return env[node_env]; 
};*/ 

module.exports = env[app.get('env')]; // this would cause an error as app is not defined 

这可能是一个愚蠢的问题,但我怎么可以使用应用程序内config.jsapp.get('env')设置?

回答

2

你可以这样做的一种方法是在配置文件中解析process.env.NODE_ENV || 'production',然后在实例化应用程序时引用它。另一个需要考虑的事情是使用process.env.NODE_ENV || 'development',以便开发人员必须明确表示他们在生产环境中。你不想意外地使用生产

const env = require('env.json') 
module.exports = env[process.env.NODE_ENV || 'production'] 
+2

我正要为默认的开发也发表评论,而不是督促;-) –

+1

所以基本上不会在配置文件中使用的应用程序设置。我的最终目标是让我有一个地方可以做'process.env.NODE_ENV || “production''。尽管根据[documentation](http://expressjs.com/en/api.html#app.set),app.set()的默认值是'process.env.NODE_ENV || “development''。由于使用'development'更好,我猜它可行。谢谢。 – Mikey