【问题标题】:RangeError: "port" argument must be >= 0 and < 65536RangeError:“端口”参数必须 >= 0 且 < 65536
【发布时间】:2017-01-19 09:23:42
【问题描述】:

我有一个用电子和 nodejs 编写的应用程序,我正在尝试运行。它使用模块portscanner 来检查特定范围内的开放端口:

portscanner.findAPortNotInUse(3000, 3010, '127.0.0.1', function(error, port) {
  console.log("Free port: " + port)

})

但是,我收到此错误:

RangeError: "port" argument must be >= 0 and < 65536
    at assertPort (internal/net.js:17:11)
    at Server.listen (net.js:1389:5)

即使我的范围明显小于 65536 且大于 0。

网上看,好像是node v6的错误(我有v6.5.0)。我是 nodejs 的新手,非常感谢有关如何解决此问题的任何帮助。谢谢。

【问题讨论】:

  • 为什么?只需绑定到端口号零。无需扫描,也无法保证您扫描找到的端口在您使用时仍然可用。不要这样做。
  • 如果你绝对想在这个范围内绑定,只需做一个循环并尝试绑定直到它工作。不需要为此使用模块。
  • 感谢您的回答。如果我根本找不到解决方案,我打算这样做。 @EJP 我最初遇到很多 ADDRINUSE 错误,我必须在重新启动应用程序之前手动终止端口以使其工作。所以,我认为这可能是一个很好的解决方案。
  • 不是。这是没有意义的。在一个随机端口上监听不需要任何东西,只需要在正确的位置设置一个零,但是你将如何告诉客户端它是哪个端口?
  • 端口号将直接转到应用程序内部使用的 mitm 代理模块。它是代理将侦听的端口。我有点不明白为什么它毫无意义,如果发生 ADDRINUSE 错误,即使我选择了一个随机端口,我该如何防止它们。

标签: node.js electron


【解决方案1】:

这是新版本节点的问题。

https://github.com/FWeinb/nodeshot/issues/11

它还在电子项目中作为issue 提出。

为了快速处理你也可以使用try.....catch

【讨论】:

  • 请注意,作者说他不会修复它,而解决方法正是我在评论中推荐的。一个完全没有意义的工具。
  • 是的,你是对的,他不会修复它。我只是给他参考,他可以在使用 electron 时检查确切的问题
【解决方案2】:

这是一个 Express JS 问题。确保你像这样编写端口监听器:

app.listen(3000, function () {
  console.log('Example app listening on port 3000!');
});

【讨论】:

    【解决方案3】:

    可能是因为 localhost 没有使用系统 "hosts" 文件中的必需语法定义。

    文件可以位于@:

    => 等/主机

    linux 的上述文件)

    => c:\ Windows \System32\Drivers\ \ 主机

    Windows 的上述文件)

    即文件有一些错误的输入。

    所以,尝试用下面的文本替换该文件中的所有内容,因为这是 hosts 文件中正常工作时始终存在的默认文本:

    127.0.0.1 本地主机

    255.255.255.255 广播主机

    ::1 本地主机

    fe80::1%lo0 本地主机

    【讨论】:

      【解决方案4】:

      最好先转换成数字再使用。

      类似的东西。 parseInt(process.env.PORT 作为字符串, 10) || 3000

      【讨论】:

        【解决方案5】:

        当我尝试 0 - 65536 范围内的 8000 时,我也会遇到同样的错误

        • 我发送了这样的请求“http:127.0.0.1:8000status”而不是“http:127.0.0.1:8000/status”
        • 检查一次“/”

        【讨论】:

          【解决方案6】:

          如果您遇到 ADDRINUSE 或类似错误,请确保您的程序正常退出。您也可以尝试kill 命令或使用 pm2。

          但是如果你真的需要找一个端口,你能把剩下的代码贴出来吗?它说错误在 server.listen 中。您确定在 findAPortNotInUse 回来之后开始收听了吗?

          【讨论】:

          • 1.他没有收到 E_ADDRINUSE 错误。 2. 问题不是答案。
          • 他很可能明白这一点,这就是他做端口查找的原因。没有这个问题就没有办法肯定地回答,但我有理由相信我的一个 cmets/questions 会解决他的问题。你只是驳回了他的问题。
          • 他正在获取“端口号超出范围”。与“使用中的地址”无关。而且我并没有“只是驳回他的问题”,而是提供了正确的解决方案。而不是单纯的猜测。
          • 实际上是的,我遇到了 ADDRINUSE 错误。在找到一个开放的端口之后,代码就会进入一个 mitmproxy,即 node-thin 模块。
          • 是的,就我所知,绝对是“之后”。
          猜你喜欢
          • 1970-01-01
          • 2021-01-24
          • 2021-12-25
          • 1970-01-01
          • 1970-01-01
          • 2021-06-12
          • 1970-01-01
          • 1970-01-01
          • 2021-02-19
          相关资源
          最近更新 更多