当前位置: 首页 > 面试题库 >

在大多数端口上侦听时,Node.js EACCES错误

宋康安
2023-03-14
问题内容

我正在测试一个应用程序(希望可以在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用户身份运行节点才能绑定到这些特定端口。我不知道为什么会这样,但是使用sudo可以解决。但是,这并不能解释我将如何在Heroku上修复它。在Heroku上无法以root用户身份运行,那么如何在80端口监听?


问题答案:

在您的工作站上运行

通常,没有root特权运行的进程不能绑定到低于1024的端口。

因此,请尝试使用更高的端口,或者通过来以更高的特权运行sudo。使用process.setgid和绑定到低端端口后,可以降级特权process.setuid

在heroku上运行

在heroku上运行应用程序时,必须使用PORT环境变量中指定的端口。

参见http://devcenter.heroku.com/articles/node-
js

const server = require('http').createServer();
const port = process.env.PORT || 3000;

server.listen(port, () => console.log(`Listening on ${port}`));


 类似资料:
  • 问题内容: 在HTTP端口80(默认端口)上运行时,Node.js引发以下错误:- 我发现该节点需要具有root用户访问权限。 按照惯例,在正常情况下,我们避免给予root访问权限。在端口80(或端口<1024)上使用它的最佳实践是什么。 该链接具有相同的问题,但只有一个答案,即PREROUTING。虽然我的解决方案还提供了其他方法。 我写这篇文章是为了在一个位置获得所有答案,因为我必须深入研究除

  • 问题内容: 我有一个app.js,用于在接收到一些POST数据时触发两个事件: 将POST数据插入数据库 使用WebSocket向客户端发送消息 这是 app.js (仅重要的 几 行) 这是 server.js (仅重要的 几 行) 我想要实现的是以侦听应用程序相同端口的方式设置WebSocketServer。我考虑过将 服务器 var从 app.js 传递到 server.js, 但是 我认为

  • 我已经用重新启动了influxdb,但是没有任何帮助。 我错过了什么? 更新7.11.2016 21:59 更新13.4.2020问题已修复。 这是一个老问题,我不记得我到底是如何解决这个问题的,但我做到了。如果我没记错的话,问题是流入没有加载正确的配置文件,这是我自己当时的愚蠢。可悲的是,我不记得为什么会发生这种事,但我记得这是我自己做的。记住总是正确地阅读文档,并谷歌出它的sht。

  • 这不是问题,而是好奇心。我使用 UDP 创建了一个简单的发送/接收 C# 应用程序,主要遵循 UdpClient 上的 MSDN 示例。我有一个文本框作为发送或接收内容的日志;它打印时间戳以及从何处发送/接收的内容。 好奇心来自端口号。当程序侦听某个端口并收到数据包时,收到的数据包上的端口与它正在侦听的端口不匹配。 例如,这是应用程序的屏幕截图(注意:即使使用不同的计算机发送/接收,这种情况仍然会

  • 我正在尝试使用 https://github.com/jeroenransijn/expressful/blob/master/docs/total-beginner-guide.md 的步骤运行一个简单的表达应用程序 当我在正确的路径中执行“node app.js”时,我在端口3000上启动了console.log Express服务器(Expressful服务器在端口3000上侦听)。虽然ex

  • Server可以监听多个端口,每个端口都可以设置不同的协议处理方式,例如80端口处理http协议,9507端口处理TCP协议。SSL/TLS传输加密也可以只对特定的端口启用。 !> 例如主服务器是WebSocket或Http协议,新监听的TCP端口(listen的返回值,即Swoole\Server\Port,以下简称port)默认会继承主Server的协议设置。必须单独调用port对象的set方