我试图找到有关如何使用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
....
}
}
有没有更好的方法来解决这个问题?
由于
答案 0 :(得分:1)
您可以使用dotenv模块来实现此目的。
因此,在您的根目录中,创建名为development.env
和production.env
在您的应用中,执行以下操作:
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
。