无法访问节点模块内的 process.env 变量

问题描述 投票:0回答:2

申请平台

  • env-bundle
  • 节点模块
    • 节点客户端

我有一个具有环境变量和节点模块的回购应用平台,在节点模块中还有另一个回购节点客户端。 当我尝试访问节点客户端项目内的 process.env 变量时,我得到以下对象作为 process.env

{
  \"LANG\":\"en_US.UTF-8\",\"PATH\":\"/home/ubuntu/bin:/home/ubuntu/.local/bin:/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games:/snap/bin\",\"HOME\":\"/home/ubuntu\",\"LOGNAME\":\"ubuntu\",\"USER\":\"ubuntu\",\"SHELL\":\"/bin/bash\",\"PM2_USAGE\":\"CLI\",\"PM2_HOME\":\"/home/ubuntu/.pm2\",\"SILENT\":\"true\",\"env_production\":\"[object Object]\",\"instance_var\":\"NODE_APP_INSTANCE\",\"exec_mode\":\"cluster_mode\",\"env\":\"[object Object]\",\"treekill\":\"true\",\"autorestart\":\"true\",\"automation\":\"true\",\"pmx\":\"true\",\"vizion\":\"true\",\"merge_logs\":\"true\",\"cwd\":\"/srv/cbax-apply-platform/\",\"log_type\":\"json\",\"instances\":\"4\",\"name\":\"www\",\"node_args\":\"\",\"pm_exec_path\":\"/srv/cbax-apply-platform/server.js\",\"pm_cwd\":\"/srv/cbax-apply-platform\",\"exec_interpreter\":\"node\",\"pm_out_log_path\":\"/home/ubuntu/.pm2/logs/application.log\",\"pm_err_log_path\":\"/home/ubuntu/.pm2/logs/application.log\",\"pm_pid_path\":\"/home/ubuntu/.pm2/pids/www-13.pid\",\"km_link\":\"false\",\"vizion_running\":\"false\",\"NODE_APP_INSTANCE\":\"0\",\"PM2_JSON_PROCESSING\":\"true\",\"_\":\"/usr/bin/pm2\",\"XDG_DATA_DIRS\":\"/usr/local/share:/usr/share:/var/lib/snapd/desktop\",\"SHLVL\":\"1\",\"PWD\":\"/srv/cbax-apply-platform/\",\"PORT\":\"8080\",\"NODE_ENV\":\"test\",\"REGION\":\"USEastTest\",\"www\":\"{}\",\"status\":\"launching\",\"pm_uptime\":\"1629364026293\",\"axm_actions\":\"\",\"axm_monitor\":\"[object Object]\",\"axm_options\":\"[object Object]\",\"axm_dynamic\":\"[object Object]\",\"created_at\":\"1629364026181\",\"pm_id\":\"13\",\"restart_time\":\"10\",\"unstable_restarts\":\"0\",\"_pm2_version\":\"2.6.1\",\"versioning\":\"null\",\"node_version\":\"9.11.1\",\"exit_code\":\"0\"}  
  1. 如何访问节点模块(节点客户端)内的 process.env 变量

  2. 我尝试了 console.log(JSON.stringify(process.env.env)) 它仍然给我 [object][object] 作为输出;

  3. 我发现这个对象来自apply-platform的ecosystem.config.js文件,所以添加了这2个变量并将其推送到服务器,但是当我控制台process.env时,我在node-client中看不到这2个变量

javascript node.js pm2
2个回答
1
投票

Node 在运行时在我们的应用程序中注入 process.env 全局变量来使用,它代表了我们的应用程序启动时的系统环境的状态。因此,例如,如果系统设置了 PATH 变量,您可以通过 process.env.PATH 变量访问该变量,您可以使用它来检查二进制文件的位置并在需要时对它们进行外部调用。

当我们编写代码时,我们永远无法确定我们的应用程序可以部署在哪里。如果我们在开发中需要数据库,我们会启动它的实例,并通过连接字符串链接到它,例如 127.0.0.1:3306。但是,当将其部署到生产中的服务器时,我们可能需要将其链接到远程服务器 32.22.2.1。

开箱即用地支持访问 Node.js 中的环境变量。当 Node.js 进程启动时,它将通过创建 env 对象作为进程全局对象的属性来自动提供对所有现有环境变量的访问。

从 .env 文件显式加载变量。

npm install dotenv --save

然后,将以下行添加到条目文件(index.js 或 app.js)的最顶部。

require('dotenv').config();

0
投票

有一个 npm 模块,可以将环境变量从

.env
文件加载到
process.env
中,称为
dotenv
。在你的情况下,你会像这样使用它:

const dotenv = require("dotenv")
dotenv.config({ path: "/path/to/.env/"})

然后您可以像这样访问 Node.js 中的环境变量:

process.env.MYVAR

如果你不希望

.env
文件中指定的变量与其他环境变量混淆,你也可以这样做:

const buffer = Buffer.from("PORT=3000") //example
const env = dotenv.parse(buffer) // returns object -> { PORT: 3000 }
// env.PORT would return 3000

dotenv.parse
接受一个缓冲区对象并返回一个对象,而不是将其绑定到
process.env
。您还可以使用
fs
模块读取
.env
文件的内容,并将其传递给
dotenv.parse

要了解更多信息,请参考 dotenv 的 npm 页面:https://www.npmjs.com/package/dotenv

© www.soinside.com 2019 - 2024. All rights reserved.