在Heroku上设置node.js服务器的端口

Cro*_*ile 34 heroku node.js express heroku-toolbelt

我使用以下行启动了node.js服务器来设置端口:

app.set('port', process.env.PORT || 8080);
Run Code Online (Sandbox Code Playgroud)

这意味着,它应该读取PORT env变量或默认为8080,就像在本地运行时一样.它们都不在Heroku上发生,服务器总是使用默认端口80.任何想法如何改变它?

heroku config
PORT: 8080
Run Code Online (Sandbox Code Playgroud)

pun*_*und 48

你不能.Heroku设置您应该绑定的PORT变量,并侦听tcp/80.

  • @broderickga你可以使用这样的东西:var port = process.env.PORT || 3000; app.listen(port,function(){ (15认同)

gom*_*sha 11

Heroku 像对待任何其他应用程序一样对待 Web 应用程序,并且不允许您直接分配侦听端口。Heroku 将为您的 Web 服务器分配一个动态端口,但要访问它,您需要使用默认端口 (80)。

在 Heroku 上,应用程序是完全独立的,不依赖于将网络服务器运行时注入到执行环境中来创建面向网络的服务。每个 Web 进程只绑定到一个端口,并侦听来自该端口的请求。要绑定的端口由 Heroku 分配为 PORT 环境变量。

与 Heroku 的合同是让进程绑定到端口以服务请求。Heroku 的路由器负责将 HTTP 请求定向到正确端口上的进程。

参考:Heroku 运行时原则 - Web 服务器


Mat*_*iak 8

你可以做例如:

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

app.listen(PORT, () => console.log(`Server is listening on port ${PORT}...`));
Run Code Online (Sandbox Code Playgroud)


ous*_*Tic 8

所有的答案都很棒!想稍微谈谈这个理论,这样人们就可以理解为什么 Heroku 将其端口设置为 80 或 443。

计算机必须创建一个约定以使用不同的协议相互通信。例如 HTTP、HTTPS、SSH、FTP 等。

因此,达成了一项协议,即计算机将与端口 80 进行 HTTPhttps通信,将在端口 443 上进行通信,等等与其他协议进行通信。下表显示了所有协议的常规保留端口号。

在此处输入图片说明

现在你们中的一些人可能会很好地思考,如果这些是保留端口号,我的计算机为什么让我使用端口号 80 和 443(例如 localhost:80)。您可以使用任何端口号(实际上您最多可以选择 65,535 个端口号)但是一旦您想要部署到现场并希望其他人使用您的应用程序,那么您将必须开始使用端口 80 (HTTP) 或端口的约定443( https)。

Heroku通过提供一个环境变量process.env.PORT来申请正确的常规端口号,这样其他人就可以访问您的应用程序,从而使您变得轻松愉快。


小智 7

您应该这样使用heroku打开的端口:

port = process.env.PORT || 80
Run Code Online (Sandbox Code Playgroud)

如果尚未设置端口,它将设置为80

  • 这个解决方案对我有用。 (2认同)
  • 我不明白。你的答案就是问题本身...... (2认同)