“应用程序抛出未捕获的异常并终止:错误:听EACCES 0.0.0.0:80”

时间:2017-02-13 14:26:39

标签: node.js azure iis iisnode

我在这里搜索了有关此错误的其他问题,但我找不到解决方案。

昨天我将 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服务器?我不确定。

4 个答案:

答案 0 :(得分:6)

您应该将portNumber设置如下:

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

Azure在变量process.env.PORT中传递一个端口,您必须使用它,因为它实际上不是一个端口,而是像\\\\.\\pipe\\2f95e604-fc02-4365-acfc-010a26242d02这样的管道。

答案 1 :(得分:0)

此错误表示您无权侦听该端口。如果其他东西已经在该端口上侦听,您应该收到如下错误:

Error: listen EADDRINUSE 0.0.0.0:80

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

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

答案 2 :(得分:0)

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

sudo node app.js

答案 3 :(得分:0)

我不知道Azure,但我知道:有些东西试图收听端口80,这需要管理员访问(windows)/ sudo权限(ubuntu)。 首先,更改您的设置,端口80是计算机从外部世界收听任何内容的主要端口,请勿更改。 如果您的应用程序中出现错误,则授予您的应用程序管理员访问/ sudo权限可以关闭整个系统,不要将这些权限授予应用程序。 如果您必须侦听端口80,请侦听另一个端口,并从端口80代理到该端口