Json nodeJS开发和生产环境配置文件加载

Json nodeJS开发和生产环境配置文件加载,json,node.js,express,require,Json,Node.js,Express,Require,基于这个答案,我在这里设置了完全相同的配置选项,但它不起作用 我的(部分)app.js文件: console.log('environment: '+process.env.NODE_ENV); const config = require('./config/db.json')[process.env.NODE_ENV || "development"]; console.log(config); My./config/db.json文件: { "development":{

基于这个答案,我在这里设置了完全相同的配置选项,但它不起作用

我的(部分)app.js文件:

console.log('environment: '+process.env.NODE_ENV);

const config = require('./config/db.json')[process.env.NODE_ENV || "development"];

console.log(config);
My./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文件,然后打印出未定义的文件

编辑 我试图在require()之后添加
console.log(typeof config)
来查看我得到了什么,我注意到如果我
require('./config/db.json')[process.env.NODE_env]
我得到
未定义的
,但是如果我
需要('./config/db.json')[“development”
我得到了正确的对象

版本:

nodeJS 6.11.4
express 4.16.2

应将配置导出为变量:

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;

这样就可以找到它:)

如果您想通过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
然后,您可以为生产添加逻辑,如果没有本地配置,
localConfig
将返回false,您可以查找在该点注入的环境变量

更新:


我看到您自己提供了生产配置,在这种情况下,您可以根据环境访问所需的密钥。只需导入
localConfig
并使用所需的键。

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

有经验的眼睛会注意到&&之前有一个空格,它在变量
development
后面添加了一个空格,因此我所比较的变量是
的“development”
,而不是我所想的
的“development”


所以,其他问题的原始答案确实有效,并且它确实加载了正确的配置

最好使用dotenv包进行此操作

npm i dotenv

步骤1:在package.json中添加

步骤2:添加.env.prod和.env.dev文件

环境发展局局长

PORT=7200
# Set your database/API connection information here
DB_URI=localhost
DB_USERNAME=root
DB_PASSWORD=password
DB_DEFAULT=dbName
步骤3:将其添加到config.js中

第四步:在需要时像这样使用

现在如果你想发展,就跑吧

npm run dev
对于prod,使用

npm run prod

请告诉我您正在尝试什么,因为您似乎还没有定义您的节点环境值…它应该在您的bashrc文件中,或者您可以像这样
NODE\u ENV=development NODE app.js
简单地使用.js扩展名
const {
  DB_URI, DB_USERNAME, DB_PASSWORD, DB_DEFAULT,
} = require('../config');
npm run dev
npm run prod