我正在向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
请求有什么问题?
答案 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\hosts
(wikipedia 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 -> 主机