在阅读了几篇Heroku NodeJS教程之后,我了解到,Heroku通过“process.env.port”环境变量为应用程序分配一个随机端口,使应用程序在本地和Heroku上都能工作的正确方法是将端口设置为
process.env.port 8000
,当您在本地主机上运行时,可以将8000替换为您希望应用程序运行的任何端口。
下面是它在我的应用程序中的样子(“服务器”是http服务器,它当前提供静态HTML文件):
server.listen(process.env.port 8000)
当我在heroku上运行应用程序并检查日志时,我会看到process.env.port被分配了一个端口号...之前的部署是29074。
当我在本地运行应用程序时,我通过url http://localhost:8000进行连接。如果我不包括端口号,那么页面不会加载(页面找不到)。
那么,当我连接到Heroku上的页面时,为什么不必在URL中指定端口29074呢?我可以访问网址https://limitless-brook-9339.herokuapp.com/,而不需要指定端口号,它可以很好地加载。事实上,如果我尝试将URL中的端口显式设置为:29074,它就说“此网页不可用”。
请记住,Heroku可能在幕后做一些路由。如果一个请求进来了,它不一定会命中您的应用程序(例如,运行Express)。它很可能会攻击像nginx这样的东西,它可以根据主机名执行自己的内部路由。
语句server.listen(process.env.port 8000)
指定端口-它是process.env.port的值(通过在命令行上设置port=80(或port=443)来指定)或使用端口8000作为默认值。