无法使用process.env变量连接到数据库,但process.env vars在日志中打印

时间:2018-11-02 20:26:55

标签: node.js express environment-variables amazon-redshift

我正在使用Node / express连接到redshift数据库。我将变量连接到.env文件中,并在我的本地计算机上,可以连接到本地主机上的网站。

但是,当我将文件上传到服务器并更改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 个答案:

答案 0 :(得分:0)

您是否尽早致电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 数据库。显然不是您想早点调用的理想解决方案,但它确实有效。