nodeJS开发和生产环境配置文件加载
基于这个答案这里https://stackoverflow.com/a/22524056/777700我已经设置完全相同的配置选项,但它不起作用。nodeJS开发和生产环境配置文件加载
我的(局部的)app.js文件:
console.log('environment: '+process.env.NODE_ENV);
const config = require('./config/db.json')[process.env.NODE_ENV || "development"];
console.log(config);
我./config/db.json文件:
{
"development":{
"host":"localhost",
"port":"3306",
"username":"root",
"password":"",
"database":"dbname"
},
"production":{
"host":"production-host",
"port":"3306",
"username":"user",
"password":"pwd",
"database":"dbname"
}
}
CONSOLE.LOG输出:
environment: development
undefined
和应用程序崩溃。任何想法为什么?文件在那里,如果我删除require()的一部分,它会打印出db.json文件,并用它打印出未定义的文件。
编辑 我尝试添加console.log(typeof config)
只是需要()后,看看有什么我得到我已经注意到,如果我require('./config/db.json')[process.env.NODE_ENV]
我得到undefined
,但如果我require('./config/db.json')["development"]
我找回正确的对象。
版本:
nodeJS 6.11.4
express 4.16.2
经过更多的在线调试和搜索,我终于找到了解决方案。问题是我在Windows机器上,而我正在使用npm run dev
命令,而我的“dev”命令看起来像SET NODE_ENV=development && nodemon server.js
。
有经验的眼睛会前& &,这增加了空间的变量development
后面发现一个空间,所以我是比较反对的变量是"development "
,而不是作为"development"
我也是这么想的。
所以,从其他问题的原始答案确实工作,它会加载适当的配置!
你应该配置导出为一个变量:
const config = {
"development":{
"host":"localhost",
"port":"3306",
"username":"root",
"password":"",
"database":"dbname"
},
"production":{
"host":"production-host",
"port":"3306",
"username":"user",
"password":"pwd",
"database":"dbname"
}
};
module.exports = config;
这样就会发现:)
我无法将module.exports添加到JSON文件中... –
只需使用.js扩展名 –
如果你想通过JSON做到这一点:
const fs = require('fs')
let localConfig
try {
localConfig = JSON.parse((fs.readFileSync('./config/db.json', 'utf-8'))
} catch (e) {
console.log('Could not parse local config.')
localConfig = false
}
module.exports = localConfig
您c然后添加生产逻辑,如果没有本地配置,localConfig
将返回false,并且您可以查找在该点注入的环境变量。
更新:
我看到你给生产配置自己,在这种情况下,你可以访问你需要根据环境的关键。只需导入localConfig
并使用您需要的键。
请告诉我你在尝试什么,因为它好像你还没有定义你的NODE_ENV环境值... –
它应该在你的bashrc文件中,或者你可以像这样'''NODE_ENV = development node app.js' ' –