“应用程序已经抛出一个未捕获的exception,并终止:错误:听EACCES 0.0.0.0:80”

我在这里search关于这个错误的其他问题,但我找不到解决scheme。

昨天,我将一个Node + Express + Socket.IO网站部署到了Azure ,但它不起作用。 我得到错误

Application has thrown an uncaught exception and is terminated: Error: listen EACCES 0.0.0.0:80 

在这个代码中:

 // more code ... var app = express(); var server = require('http').Server(app); var io = require('socket.io')(server); // right here server.listen(portNumber, function () { console.log('Server listening at port %d', portNumber); }); // more code ... 

它看起来好像另一个进程已经在这个端口上侦听..也许IIS服务器? 我不确定。

你应该设置portNumber如下:

 var portNumber = process.env.port || process.env.PORT || 1337 

Azure在variablesprocess.env.PORT传递一个端口,并且必须使用它,因为它不是一个真正的端口,而是一个像\\\\.\\pipe\\2f95e604-fc02-4365-acfc-010a26242d02

这个错误意味着你没有权限监听那个端口。 如果其他的东西已经在这个端口上听,你应该得到一个错误:

 Error: listen EADDRINUSE 0.0.0.0:80 

您需要以root身份运行以侦听1024以下的端口。

或者,您可以运行一个反向代理,将来自端口80的请求代理到您的应用侦听的某个更高端口。

尝试以root用户身份运行该应用程序。

 sudo node app.js 

我不知道Azure,但我知道这一点:有些东西想要听80端口,这需要pipe理员访问(Windows)/ sudo权限(Ubuntu的)。 首先,改变你的设置,80端口是电脑听取外界世界任何事情的主要端口,不要改变这一点。 如果在您的应用程序中出现错误,给予您的应用程序pipe理员访问权限/ sudo权限可能会导致整个系统无法使用,请勿将这些权限授予应用程序。 如果你必须监听端口80,监听另一个端口,并从端口80代理到该端口