使用 PM2 启动 Node.js 应用时发现无法读取环境变量的解决方法

背景

在开发 Node.js 应用时,我们经常会使用环境变量来配置应用的行为,例如数据库连接地址、API 密钥等等。而在生产环境中,我们通常会使用 PM2 这样的进程管理工具来启动 Node.js 应用,以保证应用的稳定性和可靠性。然而,有时我们会发现在使用 PM2 启动应用时,应用无法读取到环境变量的值,这给我们的应用带来了很大的困扰。

原因

造成这种问题的主要原因是 PM2 启动应用时的环境变量与当前终端的环境变量不一致。在终端中设置的环境变量并不会自动传递给 PM2 启动的应用,因此应用无法读取到这些环境变量的值。

解决方法

要解决这种问题,我们需要在 PM2 启动应用时显式地指定环境变量。具体来说,我们可以使用 PM2 的 --env 参数来指定环境变量的值,例如:

$ pm2 start app.js --env NODE_ENV=production

上述命令中,我们使用 --env 参数来指定 NODE_ENV 环境变量的值为 production。这样,PM2 启动的应用就可以读取到正确的环境变量了。

如果我们需要指定多个环境变量,可以使用逗号分隔它们,例如:

$ pm2 start app.js --env NODE_ENV=production,API_KEY=abc123

上述命令中,我们同时指定了 NODE_ENVAPI_KEY 两个环境变量的值。

示例代码

下面是一个使用环境变量的示例代码,它会读取 NODE_ENV 环境变量的值并输出到控制台:

const env = process.env.NODE_ENV;
console.log(`Current environment: ${env}`);

如果我们使用 PM2 启动该应用时没有指定 NODE_ENV 环境变量,那么该应用会输出 undefined。但如果我们在启动时指定了该环境变量的值,例如:

$ pm2 start app.js --env NODE_ENV=production

那么该应用会输出 Current environment: production

总结

在使用 PM2 启动 Node.js 应用时,我们需要注意环境变量的问题。如果应用无法读取到正确的环境变量值,可能会导致应用无法正常运行。为了解决这个问题,我们可以使用 PM2 的 --env 参数来显式地指定环境变量的值。这样,我们的应用就可以正确地读取到环境变量了。

来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/65be6a48add4f0e0ff7f169f