我正在使用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 ,所以我不明白
答案 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 数据库。显然不是您想早点调用的理想解决方案,但它确实有效。