无法使用 process.env 变量连接到数据库,但 process.env vars 在日志中打印
Posted
技术标签:
【中文标题】无法使用 process.env 变量连接到数据库,但 process.env vars 在日志中打印【英文标题】:Can't connect to database with process.env variables but process.env vars print in log 【发布时间】:2018-11-02 20:26:55 【问题描述】:我正在使用 Node/express 连接到 redshift 数据库。我将要连接到数据库的变量放在 .env 文件中,在我的本地机器上,我可以连接到 localhost 上的网站。
但是,当我将文件上传到服务器并更改 clientConfiguration 时,它不再起作用,即使我将 require('dotenv').config(path: ) 更改为正确的路径。我很确定路径是正确的,因为 process.env.HOST 将打印在日志中。
将出现此错误:用户“root”的密码验证失败
这是有效的硬编码部分。
var clientConfiguration =
user: "user",
database: "database",
password: "password",
port: 1234,
host: "hosturl.com",
;
当我换上这部分时,它不再起作用了。
var clientConfiguration =
user: process.env.USER,
database: process.env.DATABASE,
password: process.env.PASSWORD,
port: process.env.PORT,
host: process.env.HOST,
;
我认为这是因为 process.env 变量作为字符串被读入,但即使在我使用 parseInt(process.env.PORT) 之后也没有帮助——我也不需要本地机器上的 parseInt ,所以我不明白
【问题讨论】:
变量中的值是否包含引号?如果没有,也许您需要在变量周围添加引号? 我的所有字符串都有引号,但其中一些(一个或另一个)有双引号和单引号...... 【参考方案1】:您是否尽早致电dotenv.config()
?我在创建一个新的 Express 实例后立即调用它,它通常可以工作。
另外,不确定这是否是“可接受的方式”,但我之前遇到过类似的问题,发现在我启动服务器的 IIFE 内进行异步 dotenv.config()
调用解决了这个问题:
//AWAIT DB CONNECTION BEFORE STARTING SERVER
(async function ()
try
await dotenv.config();
await connectDB();
app.listen(PORT, ()=>
console.log(`Server listening in $MODE mode on $PORT`);
);
catch (err)
console.log(`Failure to start server: $err`);
)();
connectDB()
是我尝试通过mongoose.connect()
连接到 MongoDB 数据库。显然不是您之前想要调用的理想解决方案,但它确实有效。
【讨论】:
以上是关于无法使用 process.env 变量连接到数据库,但 process.env vars 在日志中打印的主要内容,如果未能解决你的问题,请参考以下文章