无法在我的Node.js应用程序中读取我的环境变量

时间:2012-05-29 17:08:31

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

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

// app.js

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

如果我运行以下命令,您将看到该变量具有值:

$ NODE_ENV=production
$ echo $NODE_ENV
production

我可以整天echo $NODE_ENV它会继续向我显示“生产”,但是当我在我的节点应用程序中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时一样。

5 个答案:

答案 0 :(得分:22)

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

比较此命令的输出:

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

输出:

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

答案 1 :(得分:6)

我从一些非常愚蠢的东西找到了我的路。

我刚刚添加了新的导出变量,但我的节点进程仍然没有看到它们。然后我意识到重启节点进程还不够 - 我不得不打开一个新终端(即bash实例)。一旦我这样做,它运作良好:)

答案 2 :(得分:0)

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

例如 nconf 有助于通过

管理配置
  • 命令行争论
  • 环境变量
  • 文件
  • 等。

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

的好方法

答案 3 :(得分:0)

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

答案 4 :(得分:-1)

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