我正在测试一个应用程序(希望在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上监听?


当前回答

OMG ! !就我而言,我正在做....监听(ip, port)而不是…listen(port, ip),并抛出错误信息

我使用的端口号>= 3000,甚至尝试使用管理员访问。结果什么都没有。然后仔细一看,我发现了这个问题。改成了…听(端口,ip),一切开始工作正常!!

只是把它说出来,以防它对其他人有用……

其他回答

对我有用的是,

解决方法1:我发现我的.env文件不正确。你不应该在变量之间使用','或';'分隔符。

解决方案2:如果它是一个react应用程序,确保你在客户端目录下,并且你没有试图在服务器目录下运行你的react应用程序(不是给你一个错误,而是解决问题)。

对我来说,这个问题影响了PowerShell中的所有主机和Windows上的所有端口。

禁用网络接口修复了这个问题。

我有WiFi和以太网连接,禁用以太网接口解决了这个问题。

打开“网络连接”以查看接口。右键单击,选择“禁用”。

对我来说,这只是.env文件中的一个错误。我删除了每行末尾的逗号,问题就解决了。

之前:

HOST=127.0.0.1,

后:

HOST=127.0.0.1

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

#窗口

另一个原因——也许你的端口已经被某些原因排除在外了。

所以,尝试在管理员权限下打开CMD(命令行)并运行:

Net stop winnat Net start winnat

对我来说,这就足够了。

解决方案:https://medium.com/@Bartleby/ ports-the-- availal-listen-tcp -0-0-0-3000-165892441b9d