Node.js中的简单Http请求超时,出现以下错误代码

时间:2014-09-03 10:00:25

标签: node.js http

错误

Error: { [Error: connect ETIMEDOUT] code: 'ETIMEDOUT', errno: 'ETIMEDOUT', syscall: 'connect' }
hostName: 'api.v3.factual.com'                 
url : http://api.v3.factual.com/t/places?geo=%22$point%22:12.9361149,77.6159516]}&q=Cool%20Roll%20Burger&KEY=ApiKey 

代码

function internalHttpApiCall(hostName,url,callback)
{

    var options = {
    hostname : hostName,    
    port: 4456,
    path: url,
    method: 'GET',
    }

/ * 类似的https调用工作得很好。 我已将以下链接作为解决问题的参考。 How can I use an http proxy with node.js http.Client? How can I use an http proxy with node.js http.Client? * /

    var response="";

    var req = http.request(options, function(res) {
    console.log("statusCode: ", res.statusCode);
    console.log("headers: ", res.headers);
    console.log(options.path);

    res.on('data', function(d)  { 
        response += d; 
    });

    res.on('end', function() {
        if (response && JSON.parse(response))
        {   
            var obj = JSON.parse(response)
            console.log(obj);
            output();
        }
    });

    });

    req.end();

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

    function output(xresponse)
    {
        callback(xresponse);
    }
}

1 个答案:

答案 0 :(得分:0)

只需从port对象中删除options属性即可。当您将port传递给options对象时,您表示要向该特定端口发出请求,例如http://api.v3.factual.com:4456。由于他们只公开了他们的网址,因此我们不知道他们在幕后使用了哪个端口。因此,没有必要。

并删除,选项后遗失的method: 'GET'

var options = {
  hostname: hostName,
  path: url,
  method: 'GET'
}