我正在测试一个应用程序(希望在heroku上运行,但在本地也有问题)。当它运行http.Server.listen()时,它给我一个EACCES错误-但它只发生在一些端口上。

我在本地运行:

joe@joebuntu:~$ node
> var h = require('http').createServer();
> h.listen(900);
Error: EACCES, Permission denied
    at Server._doListen (net.js:1062:5)
    at net.js:1033:14
    at Object.lookup (dns.js:132:45)
    at Server.listen (net.js:1027:20)
    at [object Context]:1:3
    at Interface.<anonymous> (repl.js:150:22)
    at Interface.emit (events.js:42:17)
    at Interface._onLine (readline.js:132:10)
    at Interface._line (readline.js:387:8)
    at Interface._ttyWrite (readline.js:564:14)

我没有在端口900(或我尝试过的其他20个端口中的任何一个)上运行任何东西,因此这应该可以工作。奇怪的是,它确实在某些端口上工作。例如,端口3000可以正常工作。

是什么导致了这种情况?

更新1:

我发现在我的本地计算机上,EACCES错误出现了,因为我必须以root身份运行node才能绑定到那些特定的端口。我不知道为什么会发生这种情况,但是使用sudo可以修复它。然而,这并不能解释我如何在Heroku上修复它。没有办法在Heroku上以root身份运行,所以我怎么能在端口80上监听?


当前回答

我在我的mac上得到了这个错误,因为它在默认情况下运行apache服务器使用的端口与节点服务器使用的端口相同,在我的情况下是端口80。我所要做的就是用sudo apachectl stop停止它

希望这能帮助到一些人。

其他回答

在Windows系统上,重新启动“主机网络服务”服务,解决了该问题。

我的mac上也有这个错误。我使用npm run dev在Windows中运行我的Nodejs应用程序,它工作得很好。但是我在我的mac上得到了这个错误-给出的错误是:错误:绑定EACCES null:80。

解决这个问题的一种方法是使用根访问权限运行它。你可以使用sudo npm运行dev,并需要输入密码。

通常最好在非特权端口(如3000)上为应用程序提供服务,该端口无需根权限也能工作。

参考:Node.js EACCES错误时监听http 80端口(权限被拒绝)

非特权用户(非root)无法打开1024以下端口上的侦听套接字。

如果你使用的是Windows。您应该重新启动Windows NAT Driver服务。

以管理员身份打开命令提示符并运行

net stop winnat

then

net start winnat

就是这样。

这是因为我安装了Nord VPN,它是自动盯着窗口。

对我来说,问题是在没有关闭快速运行服务器的情况下退出节点应用程序。