Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/heroku/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Heroku上设置node.js服务器的端口_Node.js_Heroku_Express_Heroku Toolbelt - Fatal编程技术网

在Heroku上设置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应用与任何其他应用一样对待,不允许您直接分

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

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而不是30008000

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