NodeJS - 错误:监听 EADDRNOTAVAIL:地址不可用

问题描述 投票:0回答:7

我正在运行一个应该托管在本地服务器上的节点应用程序。 目前,我只发送明文回复。

const http = require('http');

var server = http.createServer(function(req, res) {
  res.writeHead(200, {ContentType: 'text/plain'});
  res.end("test");
});

当我监听本地主机时,一切正常,我可以从浏览器发送请求。

server.listen(3000, '127.0.0.1'); // works fine, on the same machine

但是,如果我尝试通过输入路由器的 IP 来监听 LAN 网络上的端口,则会收到错误消息。

server.listen(3000, '192.168.0.1'); // causes an error
Error: listen EADDRNOTAVAIL: address not available 192.168.0.1:3
000
    at Server.setupListenHandle [as _listen2] (net.js:1253:19)
    at listenInCluster (net.js:1318:12)
    at doListen (net.js:1451:7)
    at process._tickCallback (internal/process/next_tick.js:63:1
9)
    at Function.Module.runMain (internal/modules/cjs/loader.js:7
57:11)
    at startup (internal/bootstrap/node.js:283:19)
    at bootstrapNodeJSCore (internal/bootstrap/node.js:622:3)
Emitted 'error' event at:
    at emitErrorNT (net.js:1297:8)
    at process._tickCallback (internal/process/next_tick.js:63:1
9)
    [... lines matching original stack trace ...]
    at bootstrapNodeJSCore (internal/bootstrap/node.js:622:3)

我已使用我的公共 IP 地址尝试过此操作,但未成功。 有没有办法监听 LAN 服务器上的端口,以便我可以从网络上的任何计算机发送请求?
另外,我稍后希望我的应用程序可以在任何 LAN 网络上的任何计算机上运行。如何动态添加我的主机?

node.js lan
7个回答
20
投票

试试这个

server.listen(3000, '0.0.0.0');

您可以从其他机器访问您的节点应用程序

例如

你的局域网IP是192.168.0.101那么你可以从其他机器浏览192.168.0.101:3000


6
投票

我收到此错误,问题是我连接了 VPN


4
投票

小心您的 IP。 有时它会改变。当我使用 Node 时,我必须检查 Shell 中的

ipconfig
...我希望如果其他人遇到同样的问题,它可以有所帮助...


3
投票

还有一个原因

有时,当您在容器内运行应用程序并尝试在容器内使用您的私有 IP(例如 192.168.10.2)时,就会发生这种情况。由于容器是一个隔离的环境,它不知道你的私有IP。

解决方案

您应该使用 0.0.0.0:PORT 来运行 Node js 应用程序,然后将此端口绑定到您的私有 IP。例如,在 docker compose 中,你应该这样做:

ports:
   - "192.168.10.4:PORT:PORT"

1
投票

正确的IP地址实际上是192.168.0.104。
应使用服务器计算机的 IP 地址,而不是路由器的 IP 地址。


0
投票

尝试检查端口和 IP 组合。我刚刚在这里回答了 sls 的问题。但同样也适用于此。

https://github.com/dherault/serverless-offline/issues/1015

如果是端口问题,可以通过杀死特定端口来修复

杀死 $(lsof -ti:PORT)

** 将 PORT 更改为特定端口号

是否是ip问题,同样可以验证该ip是否仍然分配给所考虑的机器。

ifconfig | grep

此命令适用于 mac 机器,但类似的变体也可用于 Linux 机器。


0
投票

如果这对我的情况有帮助,问题是我正在 MacOS 上工作,我忘记将本地主机添加到主机文件中,如下所示:

127.0.0.1 mydomain.localhost

© www.soinside.com 2019 - 2024. All rights reserved.