Node JS开发和生产环境配置文件加载



基于这里的这个答案 https://stackoverflow.com/a/22524056/777700 我设置了完全相同的配置选项,但它不起作用。

我的(部分)应用程序.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"
    }
}

控制台.log输出:

environment: development
undefined

和应用程序崩溃。知道为什么吗?文件在那里,如果我删除require()的[...]部分,它确实打印出db.json文件,有了它,它打印出未定义。

编辑我试图在 require() 之后添加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;

这样就会被发现:)

如果你想

通过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并使用所需的密钥即可。

最好为此使用 dotenv 包

npm i dotenv

第 1 步:在 package.json 中添加这个

"scripts": {
    "start": "nodemon app.js",
    "dev": "NODE_ENV=dev nodemon app.js"
    "prod": "NODE_ENV=prod nodemon app.js"
  },

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

.env.dev

PORT=7200
# Set your database/API connection information here
DB_URI=localhost
DB_USERNAME=root
DB_PASSWORD=password
DB_DEFAULT=dbName

第 3 步:在配置中添加它.js

const dotenv = require('dotenv').config({ path: `.env.${process.env.NODE_ENV}` });
const result = dotenv;
if (result.error) {
  throw result.error;
}
const { parsed: envs } = result;
// console.log(envs);
module.exports = envs;

第 4 步:需要时像这样使用

const {
  DB_URI, DB_USERNAME, DB_PASSWORD, DB_DEFAULT,
} = require('../config');

现在,如果要进行开发,请运行

npm run dev

对于生产,请使用

npm run prod

最新更新