【发布时间】: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”。