在阅读了几篇Heroku NodeJS教程后,我了解到Heroku通过" process.env.PORT"为您的应用程序分配了一个随机端口。环境变量,以及让你的应用程序在本地和heroku上工作的正确方法是将端口设置为等于
process.env.PORT || 8000
,当您在localhost上运行时,可以使用您希望应用程序运行的任何端口替换8000。
以下是我在应用中的外观("服务器"是http服务器,当前正在提供静态HTML文件):
server.listen(process.env.PORT || 8000)
当我在heroku上运行应用程序并检查日志时,我会看到process.env.PORT被分配了一个端口号...这个先前的部署,它是29074。
当我在本地运行应用时,我通过网址http://localhost:8000进行连接。如果我没有包含端口号,则页面无法加载(无法找到页面)。
为什么在连接到heroku上的页面时,我不必在URL中指定端口29074?我可以访问网址https://limitless-brook-9339.herokuapp.com/而无需指定端口号,并且可以正常加载。事实上,如果我尝试将URL中的端口显式设置为:29074,则表示"此网页不可用"。
答案 0 :(得分:3)
请记住,Heroku可能正在幕后做一些路由。如果有请求,则不一定会命中您的应用程序(例如,运行Express)。它最有可能像nginx这样,可以根据主机名做自己的内部路由。
语句server.listen(process.env.PORT || 8000)
指定端口 - 它是process.env.PORT的值(通过在命令行上设置PORT = 80(或PORT = 443)指定)或使用端口8000作为默认。