我正在尝试在heroku上运行node.js应用。我让它在本地工作,但当我在heroku上部署时,我得到以下错误:
Error R10 (Boot timeout) -> Web process failed to bind to $PORT within 60 seconds of launch
这是我试图听的端口:
const PORT = process.env.port || 3000;
当我记录process.env.port的内容时,表示process.env.port未定义。
我需要做些什么来自动设置端口吗?
编辑(FIX): 所以我发现了问题所在。 javascript正在被缩小,但是process.env.port被缩小为无效的东西。谢谢你的帮助。
答案 0 :(得分:3)
你应该在heroku上运行服务器之前传递config args。在终端类型
$ heroku config:set PORT=3333
然后你就能得到像这样的端口号
const PORT = process.env.PORT || 3000;
如果您是从终端分配的
console.log(PORT) => 3333
否则
console.log(PORT) => 3000
答案 1 :(得分:1)
任何人进入该职位。
首先检查您是否正确编写了process.env.PORT
。
我在写.Port
,花了我4个小时的时间才能弄清错误
答案 2 :(得分:0)
如果你正在使用babel,请不要在Heroku中使用babel插件 babel-plugin-transform-inline-environment-variables 。 我认为Heroku在进行部署时没有设置PORT变量,这就是为什么你会得到未定义的。
答案 3 :(得分:0)
我遇到了同样的问题,并找到了将heroku dyno端口变量传递给节点启动脚本的解决方案。
如果您在项目的根目录中创建了Procfile,只需打开它即可。
如果尚未创建Procfile,只需转到项目的根目录并创建一个名为“ Procfile”的文件。该文件没有扩展名,它有助于heroku获取应用程序的起点。有关它的更多详细信息:The Procfile
在Node.JS Heroku documentation中,没有提供任何示例,看起来像Procfile。
就我而言,我正在使用Typescript,.js文件的输出目录位于项目文件夹中的/ build目录中。我假设您的情况也一样。如果没有,只需放置您的起始文件的目录。
Procfile:
web: PORT=$PORT node ./build/index.js
答案 4 :(得分:0)
只是想把这个留给像我一样困惑的人,你必须使用
process.env.PORT
不是
process.env.$PORT