我使用以下代码启动了一个node.js服务器,以设置端口:
app.set('port', process.env.PORT || 8080);
这意味着它应该读取PORT环境变量或默认为8080,就像在本地运行时一样。但这两种情况在Heroku上都没有发生,服务器总是使用默认端口80。您有什么想法如何更改它?
heroku config
PORT: 8080
我使用以下代码启动了一个node.js服务器,以设置端口:
app.set('port', process.env.PORT || 8080);
这意味着它应该读取PORT环境变量或默认为8080,就像在本地运行时一样。但这两种情况在Heroku上都没有发生,服务器总是使用默认端口80。您有什么想法如何更改它?
heroku config
PORT: 8080
你不能这样做。Heroku设置了端口变量,你需要绑定该变量,并监听tcp/80端口。
您应该这样使用Heroku打开的端口:
port = process.env.PORT || 80
如果端口未设置,它会将端口设置为80。
所有回答都很好!我想简单解释一下理论,让人们了解为什么Heroku将它的端口设置为80或443。
计算机必须使用不同的协议来相互通信,因此需要创建一种约定。例如 HTTP、HTTPS、SSH、FTP等。
结果,就达成了这样一个协议:计算机通过端口80进行HTTP通信,https
在端口443上通信,其它协议也有类似的约定。下面是显示所有协议的传统保留端口号的表格。
现在你可能会想,如果这些是保留端口号,那我的电脑为什么可以让我使用端口号80和443呢(如localhost:80)?实际上,你可以使用任何端口号(事实上你可以选择多达65,535个端口号),但一旦你想要部署到线上并希望其他人使用你的应用程序,那么你就需要开始使用80端口(HTTP)或443端口 (https
) 的约定。
Heroku 通过提供一个环境变量process.env.PORT
,为您提供适用于正确的传统端口号,以便其他人可以访问您的应用程序。
例如,您可以做到:
const PORT = process.env.PORT || 5001;
app.listen(PORT, () => console.log(`Server is listening on port ${PORT}...`));
443
,并且无法通过 heroku config:get 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
命令,看看是否会采用硬编码的默认端口。 - tgo