与其他客户端中不存在的node.js的ECONNREFUSED错误

时间:2012-05-17 21:45:24

标签: http node.js

我正在向http客户端发出node.js请求,并收到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.js(仍然获得ECONNREFUSED

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

  • 我尝试使用浏览器使用的相同标头,但这不起作用,看起来问题是在TCP级别,所以HTTP标头不应该是#39是一个问题。

我的node请求有什么问题?

5 个答案:

答案 0 :(得分:17)

我不同意索曼的不同意见。

我一直在把这头发拉出去,但是,确实,当调用时,nodejs v0.10.24和v0.10.25拒绝连接到PHP 5.4开发服务器(PHP的命令行服务器):

php -S localhost:8088

浏览器,卷曲,其他一切都很好。但是,确实如此,将绑定地址更改为:

php -S 127.0.0.1:8088 

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

答案 1 :(得分:12)

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

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

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

答案 2 :(得分:6)

我刚遇到同样的问题。

请注意,默认情况下,Windows 7并未在C:\Windows\System32\drivers\etc\hostswikipedia reference)中包含localhost条目

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

使用127.0.0.1作为本地地址,这将在您的主机文件中运行。

答案 3 :(得分:2)

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

答案 4 :(得分:0)

$ ifconfig

docker0 Link encap:Ethernet HWaddr ....
inet 地址:172.17.0.1 Bcast:172.17.255.255 掩码:255.255.0.0 ....

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

docker ip -> 主机