【问题标题】:cant access process.env varibales inside node module无法访问节点模块内的 process.env 变量
【发布时间】:2021-10-23 12:01:55
【问题描述】:

申请平台

  • 环境包
  • node_modules
    • 节点客户端

我有一个包含环境变量和节点模块的 repo 应用平台,在节点模块中还有另一个 repo 节点客户端。 当我尝试访问 node-client 项目中的 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. 如何访问 node-module (node-client) 中的 process.env 变量

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

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

【问题讨论】:

  • 你试过 JSON.parse() 吗? --> 变量是 env: "[object Object]" 所以你有一个包含该内容的字符串。可能是如何产生该输出的问题
  • 不,它在解析 @malarres 时给出了意外的标记 o
  • 您是否尝试使用节点将 process.env.env 对象添加到环境变量中?我认为您的问题不在于读取变量,而在于写入时。但我认为你想要做什么有点模糊。

标签: javascript node.js pm2


【解决方案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();

【讨论】:

    【解决方案2】:

    有一个 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

    【讨论】:

      猜你喜欢
      • 2018-07-22
      • 1970-01-01
      • 2016-01-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-10-07
      • 2019-01-27
      相关资源
      最近更新 更多