【发布时间】: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 错误,即使我选择了一个随机端口,我该如何防止它们。