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

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

我使用的是 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
6个回答
39
投票

您需要

export
shell 变量,以便使它们可用于您在 shell 中执行的进程。

比较此命令的输出:

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

输出如下:

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

17
投票

我从一些非常愚蠢的事情中找到了来这里的路。

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

(这个答案与您从文件中导出变量而不是在当前 shell 实例中设置它们时相关)


1
投票

如果您使用

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


0
投票

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

例如 nconf 通过

帮助管理配置
  • 命令行参数
  • 环境变量
  • 文件
  • 等等..

查看源代码是一种很好的学习方式https://github.com/flatiron/nconf


0
投票

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


-2
投票

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

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