【问题标题】:NodeJS - 'config' is not able read form configuration filesNodeJS - 'config' 无法读取表单配置文件
【发布时间】:2021-09-28 02:51:30
【问题描述】:

我一直在尝试使用 'dotenv' pkg 设置环境变量。

const dotenv = require('dotenv');
dotenv.config();

这是我的 .env 文件,

NODE_ENV=development

PORT=3001

NES_POSTGRES_DB=***
NES_POSTGRES_HOST=***
NES_POSTGRES_USER=***
NES_POSTGRES_PASSWORD=***
NES_POSTGRES_PORT=***
NES_POSTGRES_REGION=***

工作正常。但问题是,'config' pkg 无法读取这些。 以下是我的项目配置目录下的“custom-environment-variables.json”文件。

{
    "databases":{
        "test":{
            "database": "NES_POSTGRES_DB",
            "host": "NES_POSTGRES_HOST",
            "username": "NES_POSTGRES_USER",
            "password": "NES_POSTGRES_PASSWORD",
            "port": "NES_POSTGRES_PORT",
            "dialect": "postgres"
        }
    },
    "node_port": "PORT"
}

现在,使用 config.get 函数来访问环境变量 PORT(之前是 dotenv 设置的,可以通过 process.env.PORT 访问)

const port = config.get('node_port'); 

错误:未定义配置属性“PORT”。

下面是我的 server.js 文件,

const dotenv = require('dotenv');
const config = require('config');
const helmet = require('helmet');
const express = require('express');
const morgan = require('morgan');
const fs = require('fs');
const path = require('path');
const routes = require('./routes/index');

console.log(`Before dotenv.config() call -> NODE_ENV : ${process.env.NODE_ENV}`); // undefined
dotenv.config();
console.log(`After dotenv.config() call -> NODE_ENV : ${process.env.NODE_ENV}`); // 3001

const expressApp = express();

expressApp.use(helmet());
expressApp.use(morgan('tiny'));

const port = config.get('node_port'); 

expressApp.listen(port, () => {
    console.log(`Express App (NES) is running on port: ${port}`);
});

以下是我的文件夹结构。

我们将不胜感激任何形式的帮助。提前致谢!

【问题讨论】:

  • 你的变量有引号,"NES_POSTGRES_DB" 因此它是一个字符串
  • 不应该是config.get('node_port');吗?
  • 是的@AdityaParab 它应该是node_port。我出于调试目的对其进行了更改。在这里发布之前忘记更新了。
  • 附带说明,使用两个包进行配置管理不是一个好主意。

标签: javascript node.js express config dotenv


【解决方案1】:

我绝对同意 aitchkhan 的观点,使用两个单独的包进行配置管理可能不是最佳实践。在不使用 config 包的情况下,您可以使用 process.env 访问您使用 dotenv 设置的环境变量,如下所示:

在 .dotenv 中:

NODE_ENV=development

PORT=3001

NES_POSTGRES_DB=***
NES_POSTGRES_HOST=***
NES_POSTGRES_USER=***
NES_POSTGRES_PASSWORD=***
NES_POSTGRES_PORT=***
NES_POSTGRES_REGION=***

在 server.js 中:

// import dotenv and express
const express = require('express');
const dotenv = require('dotenv');
enter code here
// initialize server
const expressApp = express();

// initialize dotenv
dontenv.config()

// access port from process.env after initialization
const port = process.env.PORT

// should now log the correct port number
expressApp.listen(port, () => {
    console.log(`Express App (NES) is running on port: ${port}`);
});

如果您希望继续使用 config 包,它看起来会在 ./config/default.json 查找其默认配置(如其 quick start guide 中所述)。

【讨论】:

    猜你喜欢
    • 2020-08-08
    • 2018-10-10
    • 2019-01-08
    • 2013-10-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-11
    相关资源
    最近更新 更多