2017-10-15 99 views
1

基于这个答案这里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 
+0

请告诉我你在尝试什么,因为它好像你还没有定义你的NODE_ENV环境值... –

+0

它应该在你的bashrc文件中,或者你可以像这样'''NODE_ENV = development node app.js' ' –

回答

0

经过更多的在线调试和搜索,我终于找到了解决方案。问题是我在Windows机器上,而我正在使用npm run dev命令,而我的“dev”命令看起来像SET NODE_ENV=development && nodemon server.js

有经验的眼睛会前& &,这增加了空间的变量development后面发现一个空间,所以我是比较反对的变量是"development ",而不是作为"development"我也是这么想的。

所以,从其他问题的原始答案确实工作,它会加载适当的配置!

0

你应该配置导出为一个变量:

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; 

这样就会发现:)

+0

我无法将module.exports添加到JSON文件中... –

+0

只需使用.js扩展名 –

0

如果你想通过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并使用您需要的键。