【问题标题】:ECONNREFUSED error with node.js that does not occur in other clientsnode.js 的 ECONNREFUSED 错误在其他客户端中不会发生
【发布时间】:2021-09-13 21:15:07
【问题描述】:

我正在向node.js 客户端发出http 请求,但我收到ECONNREFUSED 错误。当我使用浏览器或curl(1) 发出看似相同的请求时,它工作得很好

这是节点请求:

var options = {
  host: 'localhost',
  port: 8080,
  path: '/explorers/1.0/agegroup',
  method: 'GET'
};

var req = http.request(options, function(res) {
  res.setEncoding('utf8');
  res.on('data', function (chunk) {
    console.log('BODY: ' + chunk);
  });
});

req.on('error', function(e) {
  console.log(e);
});

req.end();

它给了我错误:

{ [Error: connect ECONNREFUSED]
  code: 'ECONNREFUSED',
  errno: 'ECONNREFUSED',
  syscall: 'connect' }

但是当我向不同的客户端(在这种情况下为curl)发出相同的请求时:

$ curl http://localhost:8080/explorers/1.0/agegroup
{... response JSON ...}

其他说明:

  • 我试过把主机改成www.google.com,端口改成80,node连接成功

  • 我已经尝试更改服务器的端口,我仍然可以向除 node.js 之外的所有客户端发出请求(仍然会得到 ECONNREFUSED)

  • 我要连接的服务器是CherryPy WSGI Server。当我尝试在 localhost:8080 连接到 node 服务器时,它工作正常,这让我认为这是服务器的问题,除了其他客户端使用 CherryPy 服务器。

  • 我尝试使用与浏览器相同的标头,但这不起作用,而且问题似乎出在 TCP 级别,因此 HTTP 标头应该不是问题。

我的node 请求有什么问题?

【问题讨论】:

  • 我得到了同样的行为——它刚刚开始展示,莫名其妙。如果我弄明白了,我会尝试发布一些信息。
  • 对我来说也一样,我的 phantomjs 网络服务器有问题,据说它使用的是猫鼬。
  • 在搜索了几个小时后,这个线程已经为我的 node.js 的 ECONNREFUSED 问题提供了答案。 aaronstacy 和 steveorevo 的回答对我有帮助,即在 gruntfile 中将“localhost”替换为“127.0.0.1”。

标签: http node.js


【解决方案1】:

我不同意 Soman 的不同意见。

我一直在努力解决这个问题,但是,确实,nodejs v0.10.24 和 v0.10.25 在调用时拒绝连接到 PHP 5.4 开发服务器(PHP 的命令行服务器):

php -S localhost:8088

浏览器,curl,其他一切都可以正常连接。然而,果然,将绑定地址改为:

php -S 127.0.0.1:8088 

并且使用 xmlrpc 的 nodejs 连接得很好。这发生在 Mac OS X 10.9.1 上。很奇怪。

【讨论】:

  • node.js 在进行 dns 解析时不遵守系统主机文件
  • 非常感谢!我在 Node 端尝试了任何可能的组合(localhost、127.0.0.1、LAN IP、使用主机文件的域名等),但没有运气。更改了我在 PHPStorm 中的运行配置,它起作用了。谢谢!
  • 也发生在我身上!
  • 你是英雄、圣人、学者。谢谢!
  • 如果这不起作用 - 不要绝望 - 试试 myst552 的答案:stackoverflow.com/a/31716912/1290746
【解决方案2】:

我想有时你只需要远离问题......

我找到了一个解决方案,但它似乎没有回答这个问题,我也不是很喜欢它。

我将 CherryPy 服务器配置更改为在 127.0.0.1 而不是 localhost 服务,node 客户端开始工作。

【讨论】:

  • 很有趣...我使用 localhost 连接到 redis 和 mysql,但从未遇到过问题...。您是否尝试从同一台服务器进行 curl? (想知道主机文件是否有问题)
  • 是的,curl 命令和节点脚本与问题中的完全相同,都命中 localhost:8080
【解决方案3】:

我刚遇到同样的问题。

请注意,默认情况下,Windows 7 不包括 C:\Windows\System32\drivers\etc\hosts (wikipedia reference) 中的 localhost 条目

为 localhost 添加条目对 Node.js (0.10.25) 没有影响,因为它显然完全跳过了 hosts 文件。

使用 127.0.0.1 作为本地地址,这将适用于您的主机文件中的任何内容。

【讨论】:

  • 对我来说就是这种情况,在意识到我已经更改了主机中的本地主机之前 1 小时的狂暴。
【解决方案4】:

我遇到了同样的问题。我可以通过将 localhost 或 127.0.0.1 替换为系统的 IP 地址来解决它(使用 ifconfig 作为 IP 地址)。

【讨论】:

  • 感谢上帝的 Stackoverflow。我不会想尝试它 - 但这就是解决方案。 (localhost 和 127.0.0.1 都不适合我)
【解决方案5】:

我在访问第三方网址时遇到了同样的问题。我尝试同时使用 dns (subdomain.domain.com) 和 ip (XXX.XXX.XXX.XXX),但没有成功。

经过一番挣扎,后来我意识到这是服务器(subdomain.domain.com)端的问题,没有响应并出现故障。

我不同意这是 localhost / 127.0.0.1(或域名与 IP 地址)的问题。 (以上情况肯定是主机映射不正确)

【讨论】:

  • hm,我不认为我遵循 - dns 映射通常发生在 node.js/curl 级别以下的库中(请参阅 gethostbyname(3))。所以在问题中它不是主机映射问题......
【解决方案6】:

$ ifconfig

docker0 链接封装:以太网 HWaddr ....
inet 地址:172.17.0.1 广播:172.17.255.255 掩码:255.255.0.0 .....

var dbSettings = {
主机:'172.17.0.1',
用户:'root',
密码:'.......',
数据库:'.......',
端口:'3306'
};

docker ip -> 主机

【讨论】:

    【解决方案7】:

    最适合我的是使用与我的 xampp 相同的端口。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-11-27
      • 2015-09-10
      • 2014-02-08
      • 2018-10-03
      相关资源
      最近更新 更多