背景
在开发 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_ENV
和 API_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