process.env.PORT未定义(在LinuxCloud环境中)

3

我已经在C9上开发了一个Node.js应用程序一段时间,现在我正在尝试在我的远程主机上制作一个副本。到目前为止,在新环境中,node app.js在控制台中工作,但我无法在浏览器中查看网站。

这似乎是一个端口问题。 我的app.js文件如下:

var express     = require("express"),
    app         = express();
(...)
app.listen(process.env.PORT, process.env.IP, function(){
   console.log(process.env.PORT);
   console.log("The YelpCamp Server Has Started!");
});

在C9环境中,日志告诉我process.env.PORT是8080。但在新环境中,日志告诉我process.env.PORT是未定义的。 我该如何解决这个问题? 这类似于这个旧的问题,不同之处在于我的远程操作系统是Linux而不是Windows。这个问题的答案说应该“修改web.config文件”,但我在我的远程主机上找不到它,而且我不确定它在Linux和Windows下是否工作方式相同。
3个回答

5

process.env变量是由"环境"设置的。基本上,它们作为访问您系统环境变量的方式。当尝试访问process.env.PORT时,如果您没有在尝试运行系统的shell中设置该环境变量,则会返回undefined

您可以在运行node app.js之前使用以下命令设置环境变量。

$ PORT=8080
$ node app.js

在这种情况下,我们在现有的shell中设置环境变量,然后调用带有app.js文件的node。环境变量从父进程传递到他们启动的进程中,如果你按顺序运行这两个操作,就会在当前shell中设置一个环境变量,当node启动时,它将接收到这个环境变量(以及所有其他环境变量)。
要查看所有对于现有node进程可用的环境变量,可以运行console.log(process.env);process.env.IP也是同样的方式。
另外:C9和其他类似的环境通常具有许多预设的环境变量。这就是为什么在C9上它是可用的原因。Heroku也是如此,这是因为他们的系统必须指定你的服务应该使用哪个端口,以便他们的负载均衡器/反向代理可以预先配置该端口。

3

我遇到了类似的情况,最终提供了一个默认端口号,如果无法从环境中读取端口号。

const PORT = process.env.PORT || 8080;

app.listen(PORT, ...)

1
在部署Node项目文件后,您需要确保任何环境变量也被转移。 1. 手动复制粘贴环境变量 从原始主机配置到新主机配置。在两个端点上使用控制面板。简单且安全。
--- 或 --- 2. 从项目根目录手动传输 .env 文件 (不建议用于生产环境)Node项目通常在根目录中有一个 .env 文件,该文件通常被排除在文件传输之外(出于明显的安全原因)。您需要确保新主机上也有相同的 .env 文件在根目录中。对于生产环境,出于安全原因通常不希望使用此选项,最好使用选项#1。
使用这种方法的项目可能使用 dotenv 包来检测 .env 并使参数可用于应用程序。它主要用于开发方便。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接