在 Express 中存储 environment/configuration 变量的首选方法是什么?

What's the preferred way to store environment/configuration variables in Express?

在 Express 应用中针对不同环境处理配置的最佳方式是什么?

我是否应该将 {development, production, testing}.json 放在 /.config 中并根据 process.env.NODE_ENV 加载合适的?像...

var env = process.env.NODE_ENV || 'development';
var config = require('./config/' + env + ".json");

或者有更好的方法吗?

我通常会这样做:

文件结构:

config/
  config.js
  env/
    development.js
    test.js
    production.js

然后在config.js文件里面存放通用配置的东西,以及加载各自的环境配置:

// main config.js file

process.env.NODE_ENV = process.env.NODE_ENV || 'development';

// load the config file for the current environment
var config = require('./env/' + process.env.NODE_ENV);

// extend config with universal config data
config.someEnvAgnosticSetting = true;

// export config
module.exports = config;

这使您可以轻松地分离出特定于环境的配置,同时允许任何需要该配置的模块只需要根配置文件。

例如,在您的 server.js 文件中:

// require config, not worrying about what environment is being loaded
var config = require('./config/config');

// use config data
app.listen(config.port);

编辑:顺便说一句,我没有提出这种方法 - 对于节点应用程序(或一般的 Web 应用程序,但碰巧在节点中你需要推出自己的设置)这是一种非常常见的方法。查看 mean.js example app 以获取使用此模式的更深入的示例。

我建议您也看看 env-dot-prop 包。

它允许您使用 dot-path.

来自 process.env 的 set/get 属性

假设您的 process.env 包含以下内容:

process.env = {
  FOO_BAR: 'baz'
  'FOO_': '42'
}

然后你可以像这样操作环境变量:

const envDotProp = require('env-dot-prop');

console.log(process.env);
//=> {FOO_BAR: 'baz', 'FOO_': '42'}

envDotProp.get('foo');
//=> {bar: 'baz', '': '42'}

envDotProp.get('foo.');
//=> '42'

envDotProp.get('foo.', {parse: true});
//=> 42

envDotProp.set('baz.foo', 'bar');
envDotProp.get('', {parse: true});
//=> {foo: {bar: 'baz', '': 42}, baz: {foo: 'bar'}}

console.log(process.env);
//=> {FOO_BAR: 'baz', 'FOO_': '42', BAZ_FOO: 'bar'}

envDotProp.delete('foo');
envDotProp.get('');
//=> {baz: {foo: 'bar'}}

console.log(process.env);
//=> {BAZ_FOO: 'bar'}

这有助于您解析环境变量并将它们用作应用程序中的配置对象。
它还可以帮助您实现 12-factor configuration.