Heroku 应用程序上的 Nodejs Express EACCES 0.0.0.0:80

Mar*_*dez 6 javascript git heroku node.js express

我正在尝试从他们的网站上在新创建的 Heroku 应用程序上运行 Node 应用程序。我按照他们的步骤操作,但在显示应用程序状态时仍然出现错误。

我在没有命令的情况下遵循了Node.js 入门部分,heroku create因为我已经从网络上创建了。

所以当我跑的时候:heroku ps:scale web=1它告诉我:

Scaling dynos...完成,现在以 1:Free 运行网络

但是在运行时heroku ps

=== web (免费): npm run start (1)

web.1: 崩溃 2018/10/25 11:25:49 -0300 (~ 8m 前)

所以我的日志heroku logs --tail显示了这个错误:

2018-10-25T14:25:44.000000+00:00 app[api]:构建成功

2018-10-25T14:25:46.451739+00:00 heroku[web.1]:用命令启动进程 npm run start

2018-10-25T14:25:49.113832+00:00 应用程序[web.1]:

2018-10-25T14:25:49.113864+00:00 app[web.1]: > my-app@1.0.0 start /app

2018-10-25T14:25:49.113866+00:00 app[web.1]:> 节点 server.js

2018-10-25T14:25:49.113867+00:00 应用程序[web.1]:

2018-10-25T14:25:49.418151+00:00 应用程序[web.1]:events.js:167

2018-10-25T14:25:49.418191+00:00 应用程序[web.1]:扔er;// 未处理的“错误”事件

2018-10-25T14:25:49.418193+00:00 应用程序[web.1]:^

2018-10-25T14:25:49.418194+00:00 应用程序[web.1]:

2018-10-25T14:25:49.418196+00:00 app[web.1]: 错误:听 EACCES 0.0.0.0:80

所以我检查了我在设置时是否犯了错误。

我使用带有以下代码的简单 Express 路由和服务器:

app.get('/', (req, res) => { ... });
app.listen(80, err => {
    if(err) throw err;
    console.log("%c Server running", "color: green");
});
Run Code Online (Sandbox Code Playgroud)

另外我确保我添加enginespackage.json

"scripts": {
    "start": "node server.js"
},
"engines": {
    "node": "10.11.0",
    "npm": "6.4.1"
},
Run Code Online (Sandbox Code Playgroud)

我还在里面的根路径中创建了一个Procfile文件web: npm run start

因此,当检查完所有内容后,我只需运行这些命令,一切看起来都很棒,直到我检查日志或访问应用程序:

git commit -am "my commit text"
git push heroku master
Run Code Online (Sandbox Code Playgroud)

我在日志中看到了这一点:

远程:-----> 正在压缩...

远程:完成:18.3M

远程:-----> 正在启动...

远程:发布 v12

远程:https : //my-app.herokuapp.com/部署到 Heroku

偏僻的:

远程:验证部署...完成。

https://git.heroku.com/my-app.git

3656da0..f1eb078 主 -> 主

所以......关于我做错了什么的任何建议?提前致谢。

Aks*_*ayM 11

您需要为应用程序提供端口以在环境变量中侦听。
heroku 所做的是它在动态端口上运行我们的应用程序。

尝试使用这个:

const PORT = process.env.PORT || 3000;
app.listen(PORT, err => {
    if(err) throw err;
    console.log("%c Server running", "color: green");
});
Run Code Online (Sandbox Code Playgroud)

此外,您不应将端口绑定到 80,因为它是保留的标准 http 端口。

  • 端口 3000 是为了防止环境变量未定义。Heroku将动态端口分配给环境变量 (2认同)