我在这里搜索了有关此错误的其他问题,但我找不到解决方案。
昨天我将 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服务器?我不确定。
答案 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代理到该端口