在 Node.js 中侦听 EADDRNOTAVAIL 错误

Posted

技术标签:

【中文标题】在 Node.js 中侦听 EADDRNOTAVAIL 错误【英文标题】:listen EADDRNOTAVAIL error in Node.js 【发布时间】:2012-06-04 07:14:42 【问题描述】:

我在我的服务器中安装了 nginx 和 Node.js。

当我尝试运行我的 node.js 文件时,我收到一个错误:

节点.js:201 扔 e; // process.nextTick 错误,或第一次滴答时的 'error' 事件 ^ 错误:听 EADDRNOTAVAIL 在 errnoException (net.js:614:11) 在 Array.0 (net.js:689:28) 在 EventEmitter._tickCallback (node.js:192:40)

我该如何解决这个问题?

谢谢!

【问题讨论】:

您的节点文件设置要监听哪个端口? 【参考方案1】:

我遇到了这个问题,我以为是 port 问题,但结果是 IP 问题。

我的 HOST 环境变量指向一个静态 IP,而我的 Node 服务器正在监听该地址。在我的路由器回收的某个时候,它开始为我的机器分配一个新的 IP,并且我开始收到您发布的错误。通过更改我的服务器正在侦听的地址来修复它。

我的配置:

app.set('port', process.env.PORT || 3000);
app.set('host', process.env.HOST || '0.0.0.0');

http.createServer(app).listen(app.get('port'), app.get('host'), function()
  console.log("Express server listening on port " + app.get('port'));
);

确保您的主机正在访问您的计算机。无论如何,正如@miltonb 建议的那样,环回应该始终有效:

app.set('host', '127.0.0.1');

【讨论】:

我的以太网电缆丢失了,因此使用了不同的 IP (WiFi)。固定! 127.0.0.1 不适用于 ubuntu 上的 express.js。我删除了主机参数,它与默认的本地主机一起工作。 ;)【参考方案2】:

我认为您需要更多上下文,例如您的某些代码。我猜你开始在网络服务器或套接字上监听?基于这个假设,除非我使用 localhost 运行,否则当我在测试服务器上运行基本 Web 服务器时,我会得到类似的结果。

events.js:48
        throw arguments[1]; // Unhandled 'error' event
                   ^
Error: listen EADDRNOTAVAIL
    at errnoException (net.js:670:11)
    at Array.0 (net.js:756:28)
    at EventEmitter._tickCallback (node.js:190:38)

尝试将 [hostname] 参数更改为 localhost:

var http = require('http');
http.createServer( function ).listen(8000, '127.0.0.1');

【讨论】:

【参考方案3】:

我遇到了同样的错误,然后我更改了端口并开始工作

【讨论】:

我遇到了同样的错误,这是因为我在 localhost:3000 上运行了 Ruby on Rails 应用程序。停止其他应用程序或更改端口都可以解决问题。【参考方案4】:

会不会是那个节点已经在运行服务器了?我收到了类似的错误,并在故障排除时发现了这一点。关闭之前的节点服务器解决了我的问题。

【讨论】:

我可以看到这是您对问题的第一个答案,因此您没有代表将其作为评论发布,但将来您可能会考虑将其发布为评论。答案应该是解决问题的方法,你很有信心会解决问题。【参考方案5】:

对我来说,问题是我写的 IP 根本不存在 :) 通常在家里我有一个 192.168.x.x IP,重启后我有一个不同的地址......当我试图 @ 987654322@我的应用程序 - 它有一个旧 IP 的配置 ....

一如既往地127.0.0.1可以工作,但是当你想用其他设备验证你的网站时,你想使用外部IP192.168.x.x ...或类似的。

【讨论】:

【参考方案6】:

大多数时候是 IP 地址或主机名。原因是,node js 将其作为启动服务器的关键项。如果存在冲突或不正确的 IP 地址,则会出现此错误

错误:监听 EADDRNOTAVAIL

希望这会有所帮助。

【讨论】:

【参考方案7】:

对我来说,我遇到了同样的错误,当我检查我的配置时,我发现 host=127.0.0.0 会引发错误,因为它应该是 127.0.0.1 而不是 127.0.0.0

【讨论】:

【参考方案8】:
var express = require('express');

var app = express();
app.set('port', process.env.PORT || 3000);
app.set('host', process.env.HOST || 'localhost');

app.listen(app.get('port'), function()
  console.log('Express server listening on port ' + app.get('host') + ':' + app.get('port'));
);

为我工作。 它也适用于localhost 和您的本地 IP 进行调试,无需任何更改。

【讨论】:

【参考方案9】:

当 'ip addr add i:p:v:6' 仍处于不确定状态或其他东西(刚刚执行/正在执行)时也会发生这种情况,并且我认为界面还没有完全准备好收听并且仍在忙于添加新的ipv6 地址。

使用 execSync [参见 https://nodejs.org/api/child_process.html#child_process_child_process_execsync_command_options] 调用 'sleep' 暂停 2 秒似乎允许使用 Error:listen EADDRNOTAVAIL 侦听不错误。

[我认为这在 Ubuntu 上的 NodeJS 7.4.0 中确实是一个错误,因为在使用/监听连接之前创建 ipv4 地址不会发生这种情况。]

【讨论】:

【参考方案10】:

例如,检查您的 ip ipconfig 地址并添加任何端口 3004。 下面的代码终于为我工作了。如果您想从网络中的其他设备访问此服务器。或者只需将本地主机 ip 设置为 127.0.0.1 并从您的设备获取访问权限。

var server = require('http').createServer(app);
server.listen(3004, '192.168.x.x', function () 
  console.log("Listening on port 3000!");
);

【讨论】:

【参考方案11】:

就我而言,我通过检查目录 /tasks/options 来修复它

我发现 connect.js 文件的静态 IP 地址不正确。我只是将其更改为正确的,并且有效。

【讨论】:

以上是关于在 Node.js 中侦听 EADDRNOTAVAIL 错误的主要内容,如果未能解决你的问题,请参考以下文章

侦听大多数端口时出现 Node.js EACCES 错误

侦听http 80端口时Node.js EACCES错误(权限被拒绝)[重复]

侦听http 80端口时Node.js EACCES错误(权限被拒绝)[重复]

Node.js 的进程间和服务器间事件发射器/侦听器?

在同一 nginx 服务器上使用 SSL 的两个 node.js 域 - 443 的重复侦听选项

Node.js 远程调试不起作用