在Heroku上设置node.js服务器的端口
我启动了一个node.js服务器,使用以下行设置端口:在Heroku上设置node.js服务器的端口,node.js,heroku,express,heroku-toolbelt,Node.js,Heroku,Express,Heroku Toolbelt,我启动了一个node.js服务器,使用以下行设置端口: app.set('port', process.env.PORT || 8080); 这意味着,它应该要么读取PORT env变量,要么默认为8080,就像它在本地运行时一样。这两种情况都不会发生在Heroku上,服务器始终使用默认端口80。你知道怎么改吗 heroku config PORT: 8080 你不能。Heroku设置您应该绑定的端口变量,并在tcp/80上侦听。Heroku将web应用与任何其他应用一样对待,不允许您直接分
app.set('port', process.env.PORT || 8080);
这意味着,它应该要么读取PORT env变量,要么默认为8080,就像它在本地运行时一样。这两种情况都不会发生在Heroku上,服务器始终使用默认端口80。你知道怎么改吗
heroku config
PORT: 8080
你不能。Heroku设置您应该绑定的端口变量,并在tcp/80上侦听。Heroku将web应用与任何其他应用一样对待,不允许您直接分配侦听端口。Heroku将为您的web服务器分配一个动态端口,但要访问它,您需要使用默认端口(80) 在Heroku上,应用程序是完全独立的,不依赖于 将Web服务器注入到执行环境中的运行时注入 创建面向web的服务。每个web进程只绑定到一个端口, 并侦听来自该端口的请求。要绑定到的端口 由Heroku指定为端口环境变量 与Heroku签订的合同是为了将流程绑定到要服务的港口 请求。然后,Heroku的路由器负责指导HTTP 对正确端口上的进程的请求
参考:您应该使用heroku打开的端口,如下所示:
port = process.env.PORT || 80
在我的例子中,heroku正在监听默认的HTTPS端口:
443
,并且通过heroku config:get port
不可见,例如:
const PORT = process.env.PORT || 5001;
app.listen(PORT, () => console.log(`Server is listening on port ${PORT}...`));
所有答案都很棒!想稍微接触一下这个理论,这样人们就可以理解为什么Heroku将端口设置为80或443。 计算机必须创建一个约定,以不同的协议相互通信。例如HTTP、HTTPS、SSH、FTP等 因此,有一个协议,计算机将与端口80进行HTTP通信,
https
将在端口443上进行通信,依此类推,与另一个协议进行通信。下表显示了协议的所有常规保留端口号
现在你们中的一些人可能会想,如果这些是保留端口号,为什么我的计算机允许我使用端口号80和443(ex localhost:80)。您可以使用任何端口号(事实上,您最多可以选择65535端口号),但一旦您希望部署到live并希望其他人使用您的应用程序,则必须开始使用端口80(HTTP)或端口443(https
)的约定
Heroku为您提供了一个环境变量
process.env.PORT
,用于申请正确的常规端口号,以便其他人可以访问您的应用程序。80是默认端口,因此使用80而不是3000或8000
const PORT = process.env.PORT || 80;
var server = app.listen(PORT, function() {
var host = server.address().address;
var port = server.address().port;
console.log("server is listening at http://%s:%s", host, port);
});
heroku config:get PORT
为您提供了什么?此外,您可以尝试heroku config:unset-PORT
,查看是否选择了硬编码的默认值。“heroku-config:get-PORT”给我8080,但应用程序在80上提供。在“heroku config:unset”之后没有更改嘿,你接受了一个答案,但它看起来并不像是一个答案,在我的例子中,process.env.PORT在heroku上没有定义,我被困在这里了。那么,在app.js(或开始脚本)中,我用什么作为端口呢var server=http.createServer(sendSMSHandler);监听(端口)
@broderickga您可以这样使用:var port=process.env.port | | 3000;app.listen(port,function(){这很有效。如果需要,也可以在日志中看到分配的端口,并且可以通过相同的端口访问应用。此处相同。我将配置变量设置为端口5000,花了4个小时才发现它不在乎。它使用的是端口80(HTTP)和443(HTTPS)不管怎样。我在发现并查看是否有任何文档后发现了这篇文章。我想让人们知道,在后台还有很多事情要做。Punund简要地提到TCP,还有另一个叫做UDP的东西用于发送数据位。我创建这个答案是为了让人们充分理解为什么Heroku希望您使用他们的process.env.PORT