【发布时间】: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