使用Express声明env变种的最简洁方法

时间:2016-04-13 08:44:13

标签: javascript node.js

我试图找到有关如何使用Express存储Node的环境变量的最佳解决方案。许多教程建议将数据移动到.json文件here is an example但是不要配置环境变量,它们定义了新的变量,例如:

{
    "test": {
        "facebook_app_id": "facebook_dummy_dev_app_id",
        "facebook_app_secret": "facebook_dummy_dev_app_secret",
    }, 
    "development": {
        "facebook_app_id": "facebook_dummy_dev_app_id",
        "facebook_app_secret": "facebook_dummy_dev_app_secret",
    }, 
    "production": {
        "facebook_app_id": "facebook_dummy_prod_app_id",
        "facebook_app_secret": "facebook_dummy_prod_app_secret",
    }
}

我发现这种方法的问题是我无法在其中定义变量,因为所有元素都必须在双引号内(")所以我无法做到:

{
    process.env.PORT = 3000,
    process.env.NODE_APP = XXX
    ....
}

我试图做一些棘手的事情,例如定义.js文件并在那里存储vars,如下所示:

module.exports = {     环境:{         USER:" www数据&#34 ;,         NODE_ENV:"显影&#34 ;,         PORT:" 3002&#34 ;,         ....         LOG_FILE:" error.log中"     } }

在这种情况下,我还没有找到在env中使用这些变量的方法,例如:

module.exports = {
    env: {
        ...
        process.env.APP_NAME:"application.name",
        process.env.NODEJS_DIR:"/var/nodejs",
        process.env.APP_DIR: `${this.NODEJS_DIR}/${this.APP_NAME}/current`, //Not working
        process.env.APP_DIR:process.env.NODEJS_DIR}/${this.APP_NAME}/current`, //Not working, and verbose, ugly code
        ....
    }
}

有没有更好的方法来解决这个问题?

由于

4 个答案:

答案 0 :(得分:1)

您可以使用dotenv模块来实现此目的。

因此,在您的根目录中,创建名为development.envproduction.env

的2个文件(取决于您可能拥有的不同环境的数量)

在您的应用中,执行以下操作:

var env = process.env.NODE_ENV || 'development';
require('dotenv').config({
    path: './' + env + '.env'
});

然后,您可以访问在相应env文件中定义的所有环境变量。

答案 1 :(得分:0)

你正在寻找这样的东西。

app.configure('production', function(){

// production env. specific settings 

});

答案 2 :(得分:0)

作为形成配置文件的另一个例子

// config file in /config/general.js
var path = require('path'),
    rootPath = path.normalize(__dirname + '/..'),
    env = process.env.NODE_ENV || 'development';

    if (env == 'development') {
      process.env.DEBUG = 'http';
    }

var config = {
  development: {
    name : 'development',
    root: rootPath,
    port: 3000
  },

  production: {
    name : 'prod',
    root: rootPath,
    port: 3000
  }
};

module.exports = config[env];

答案 3 :(得分:0)

想想开发团队,他们将如何部署您的软件?它们不会触及代码,配置文件不应包含任何逻辑。所以包含配置的.js文件是错误的。您必须为它们提供配置执行的接口。这可能是一个参数,或者如果配置很复杂,那么它应该被提取到配置文件中。

我的方法是默认加载app.json。如果dev-ops engeneer提供NODE_ENV=customenv,则加载app.customenv.json配置文件。这样,.json文件不会向用户公开不相关的开发配置。

APP_NAME不是环境的一部分,而是您的软件配置的一部分。应在.json配置文件中配置此参数。

目录可以与软件目录相关,它在__dirname变量中定义。

app.json文件应由配置模块加载。您可以使用其中一个可用的开源项目,例如nconf