ECONNREFUSED错误,在其他客户端不会出现node.js错误

我正在用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.js(仍然ECONNREFUSED

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

  • 我试过使用我的浏览器使用相同的标题,但是这是行不通的,似乎问题是在TCP级别,所以HTTP标头不应该是一个问题。

我的node请求有什么问题?

我不同意Soman的分歧。

我已经把这个发型拉出来了,但是,当然,nodejs v0.10.24和v0.10.25在调用时拒绝连接到PHP 5.4开发服务器(PHP的命令行服务器):

 php -S localhost:8088 

浏览器,curl,一切连接就好了。 然而,果然,将绑定地址更改为:

 php -S 127.0.0.1:8088 

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

我想有时你只是需要摆脱这个问题…

我find了一个解决scheme,但似乎并没有回答这个问题,我不太喜欢它。

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

我只是面临同样的问题。

请注意,Windows 7默认情况下不包含C:\Windows\System32\drivers\etc\hosts localhost条目( 维基百科参考 )

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

使用127.0.0.1作为本地地址,这将工作在你的主机文件。

我有同样的问题。 我能够解决它通过replace本地主机或127.0.0.1我的系统的IP地址(使用ifconfig的IP地址)。

我正好面临同样的问题,我正在访问第三方url。 我试过使用dns(subdomain.domain.com)和ip(XXX.XXX.XXX.XXX),但它没有工作。

经过一番斗争,后来我意识到,这是一个问题在服务器(subdomain.domain.com)结束,这是没有响应和下降。

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