【问题标题】:Can't read my environment variable in my Node.js app无法在我的 Node.js 应用程序中读取我的环境变量
【发布时间】:2012-06-03 22:37:18
【问题描述】:

我在 Ubuntu 12.04 上,我只是在学习环境变量。我正在尝试从我的应用程序中读取自定义变量,但它始终显示为undefined。这是我的测试应用程序的代码:

// app.js

console.log('Value: ' + process.env.NODE_ENV);

如果我运行以下命令,你会看到变量有一个值:

$ NODE_ENV=production
$ echo $NODE_ENV
production

我可以整天echo $NODE_ENV,它会继续向我显示“生产”,但是当我在我的 Node 应用程序中执行 process.env.NODE_ENV 时,它总是显示“未定义”。

$ node app.js
Value: undefined

但奇怪的是,如果我显示另一个我知道已经存在的环境变量,比如process.env.PATH,那么它就可以工作。

$ node app.js
Value: /usr/lib/lightdm/lightdm:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games

另一个怪癖是命令printenv list 似乎不包含我的自定义变量NODE_ENV,尽管echo $NODE_ENV 向我显示了正确的值。 printenv NODE_ENV 也没有显示任何内容,但 printenv PATH 显示了正确的值,就像我在节点应用程序中访问 PATH 时一样。

【问题讨论】:

标签: bash node.js ubuntu terminal environment-variables


【解决方案1】:

您需要export shell 变量才能使它们可用于您在 shell 中执行的进程。

比较这个命令的输出:

FOO=bar; bash -c 'echo $FOO'

输出如下:

export FOO=bar; bash -c 'echo $FOO'

【讨论】:

  • 奇怪的是,即使我可以使用echo $FOO 看到变量值,我也无法使用process.env.FOO 看到它...
【解决方案2】:

您可能需要考虑使用库来管理应用配置。

例如 nconf 帮助管理配置通过

  • 命令行参数
  • 环境变量
  • 文件
  • 等等..

查看源代码是学习https://github.com/flatiron/nconf的好方法

【讨论】:

    【解决方案3】:

    我从一些非常愚蠢的事情中找到了我的方式。

    我刚刚添加了新的导出变量,但我的节点进程仍然没有看到它们。然后我意识到重新启动节点进程是不够的——我还必须打开一个新终端(即 bash 实例)。一旦我这样做了,它就可以正常工作:)

    【讨论】:

    • 谢谢,它正在工作!我对为什么它是“未定义”感到非常沮丧,我所要做的就是退出 bash 实例并打开一个新实例。
    【解决方案4】:

    重新启动您的 bash(源 ~/.bashrc)。这将考虑到您的系统环境。

    【讨论】:

      【解决方案5】:

      从一些非常愚蠢的事情中找到了我的方式!我正在从我的主项目目录中的“src”文件夹运行我的服务器文件,因此我的 .env 在“src”文件夹本身(从我的服务器运行的位置)中运行。一旦我将 .env 放在我的主项目目录中,它就对我有用。确保您的“.env”在主目录中,而不是在“src”文件夹中。

      【讨论】:

        【解决方案6】:

        如果您使用dotenv,请确保在访问环境中的变量之前进行配置。你的代码顺序在 js 中很重要。

        【讨论】:

          猜你喜欢
          • 2021-10-28
          • 2020-01-27
          • 1970-01-01
          • 2021-08-07
          • 2020-01-16
          • 1970-01-01
          • 2018-03-09
          • 1970-01-01
          相关资源
          最近更新 更多