我正在尝试将节点服务器部署到heroku,我收到此错误:throw er; //未处理的'错误'事件

时间:2017-09-02 23:47:39

标签: node.js heroku

我正在尝试将节点应用程序部署到heroku,看起来像是从heroku动态分配端口的其他问题判断,它与某些东西不兼容。

(我必须删除一些细节才能发布问题)

events.js:182
throw er; // Unhandled 'error' event
       ^

 Error: listen EACCES 0.0.0.0:80
     at Object._errnoException (util.js:1041:11)
     at _exceptionWithHostPort (util.js:1064:20)
     at Server.setupListenHandle [as _listen2] (net.js:1305:19)
     at listenInCluster (net.js:1370:12)
     at Server.listen (net.js:1466:7)
     at Function.listen (/app/node_modules/express/lib/application.js:618:24)
     at Object.<anonymous> (/app/index.js:9:21)
     at Module._compile (module.js:573:30)
     at Object.Module._extensions..js (module.js:584:10)
     at Module.load (module.js:507:32)
 npm ERR! code ELIFECYCLE
 npm ERR! errno 1
 npm ERR! TFP@1.0.0 start: `node index.js`
 npm ERR! Failed at the TFP@1.0.0 start script.

2 个答案:

答案 0 :(得分:0)

问题

我有同样的问题。当我尝试手动设置端口时遇到了这个问题:

app.listen(80, function () {
  console.log('Example blog app listening on port 80!')
});

这导致了同样的EACCES错误。

解决方案

我能够通过返回并查看我找到的Heroku docs来解决问题:

  

Web进程类型中的命令必须绑定到PORT环境变量中指定的端口号。如果没有,则dyno将无法启动。

因此,假设您正在使用express,如果您将端口分配切换为如下所示:

app.set('port', (process.env.PORT || 5000));


app.listen(app.get('port'), function() {
  console.log('Node app is running on port', app.get('port'));
});

然后你的应用程序应该正常启动。

没有Express.js的解决方案

如果您使用Express,则可以将端口设置为:

var PORT = process.env.PORT || 5000;

process.env.PORT将成为您的生产端口,5000将成为您在本地测试服务器时使用的端口。

答案 1 :(得分:0)

我遇到了这种问题。确切的错误是端口80已在另一个项目或应用程序中启用。因此,在启动您的应用程序之前,请停止另一个映射到80端口的应用程序。 现在,您可以运行应用程序而不会出现此错误。

谢谢