【问题标题】:process.env variables are undefined even after export即使在导出之后,process.env 变量也未定义
【发布时间】:2016-02-17 16:27:54
【问题描述】:

我正在编写一个 Node.js express 应用程序,并希望使用环境变量来设置服务器应该运行的端口。

但是,我似乎无法让 process.env.PORT 读取我的 PORT 环境变量。

我已经使用export 定义了 PORT 环境变量,如下所示: export PORT=1234 我也将此行添加到 ~/.bash_profile 文件中,但 process.env.PORT 仍未定义。

当我在终端中运行echo $PORT 时,它会正确显示值(1234)。

我正在运行 Node V0.12.7 和 OSX El Capitan 10.11.1 并且真的找不到任何额外线索来说明可能导致此问题的原因。

谢谢!

编辑: 这是在尝试将process.env.port 分配给port 变量之前执行的代码

var app = require('../app');
var proxy = require("../proxy");
var http = require('http');
var nconf = require('nconf');
nconf.file(__dirname + "/appConf.json");
var appSettings = require('../appSettings');

var port = normalizePort(process.env.PORT || 8080);

【问题讨论】:

  • 您是否正在运行内联命令 (node -e 'process.env.PORT')?如果是这样,您无法访问process 对象是正常的。
  • 不完全确定内联运行我的命令是什么意思。我正在运行我的程序运行node serverserver.js 是主文件)。其他环境变量如HOME (process.env.HOME) 已定义并可访问
  • 你能显示你的server.js的代码吗?顺便说一句,也许你应该更新你的节点版本,因为我们现在是 4.2 版。
  • 请查看我的代码编辑。我还尝试将port 变量的赋值移动到第一行,但出现了同样的问题。我没有更新到节点 4.2,因为我正在使用的第三方依赖项存在一些问题,但我现在将升级以测试是否是这个问题。
  • 你有想过这个吗?我也有同样的问题

标签: node.js macos express


【解决方案1】:

有一个很棒的 npm 包,名为 dotenv,它会从与你的 nodeJS 应用程序相同的目录中名为 .env 的文件中自动加载任何环境变量。这可以为您提供一个不同的PORT 变量项目到项目,而不是在所有终端上全局定义一个PORT

就其他一切而言,听起来PORT 应该在那里(你甚至说它是从命令行正确的echo-ing)。您是否在使用echo 的同一终端中运行node?我能想到的唯一其他问题是,如果您在修改 ~/.bash_profile 后没有重新启动运行服务器的终端,或者可能是某个地方的简单错字。

我会将此作为评论发布,但我没有得分。

【讨论】:

  • 感谢dotenv 的建议。只要我的环境变量没有被正确读取,我就会使用那个包!此外,我从与echo $PORT 相同的终端运行节点,也重新启动了终端。我不会将您的答案标记为已接受的答案,以防有人对可能导致 Node 无法读取我的环境变量的原因有答案。 :)
  • 感谢重启终端的建议。我设置了 autoenv 并且很困惑为什么 $echo 在我的 app.js 中工作但不是 console.log(.envStuff)。修复了我的问题。
  • 感谢您建议在同一终端之外运行节点
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-08-07
  • 2022-01-01
  • 1970-01-01
  • 2021-09-27
  • 1970-01-01
相关资源
最近更新 更多