Heroku App EACCES 0.0.0.0:80上的Nodejs Express

时间:2018-10-25 14:53:03

标签: javascript node.js git express heroku

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

由于我已经从网络上创建了广告,所以我没有遵循heroku create命令而遵循Node.js getting started部分。

因此,当我跑步时:heroku ps:scale web=1它向我显示:

  

缩放动态...完成,现在以1:免费运行网络

但是在运行heroku ps时:

  

===网络(免费):npm运行开始(1)

     

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

所以我在heroku logs --tail上的日志显示了此错误:

  

2018-10-25T14:25:44.000000 + 00:00应用程序[api]:构建成功

     

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

     

2018-10-25T14:25:49.113832 + 00:00 app [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 app [web.1]:

     

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

     

2018-10-25T14:25:49.418191 + 00:00 app [web.1]:抛出er; //未处理的“错误”事件

     

2018-10-25T14:25:49.418193 + 00:00 app [web.1]:^

     

2018-10-25T14:25:49.418194 + 00:00 app [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");
});

我还要确保将engines添加到 package.json

"scripts": {
    "start": "node server.js"
},
"engines": {
    "node": "10.11.0",
    "npm": "6.4.1"
},

我还在根路径中创建了一个 Procfile 文件,其中包含web: npm run start

因此,当所有内容都选中后,我只需运行以下命令,所有内容看起来都很不错,直到我检查日志或访问应用程序为止:

git commit -am "my commit text"
git push heroku master

我在日志中看到了这个

  

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

     

远程:完成:1830万

     

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

     

远程:已发布v12

     

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

     

远程

     

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

     

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

     

3656da0..f1eb078主站->主站

所以...关于我在做什么错的任何建议?预先感谢。

2 个答案:

答案 0 :(得分:2)

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

尝试使用此:

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

也不要将端口绑定到80,因为它是保留的标准   http端口。

答案 1 :(得分:1)

Heroku dynos公开了一个动态端口供您的应用绑定。此值在$ PORT env var中公开。您必须更改代码以绑定到此端口。

const port = process.env.PORT || 80;

app.listen(port, err => {
    if(err) throw err;
    console.log("%c Server running", "color: green");
});