对外部API的https请求上的套接字挂起错误?

时间:2014-08-13 16:22:21

标签: node.js

尝试访问外部API时,我收到套接字挂起错误。可以手动访问外部API(click here),即使使用我的API密钥(这是用于在网站上演示API的开发API密钥)也会返回结果。

我正在使用的代码如下所示。当您看到my_api_key存在真实密钥时请注意。

var zipCodeApiPath = '/rest/my_api_key/radius.json/{{zip}}/15/mile';
...
var https = require('https');
...
var options = {
    hostname: 'zipcodedistanceapi.redline13.com',
    port: 443,
    path: zipCodeApiPath.replace('{{zip}}', zipCode),
    method: 'GET',
    secureProtocol: 'SSLv3_method'
};
options.agent = new https.Agent(options);

console.log(options);

https.request(options, function(res) {
    console.log(res);
    ...
});

当注销到控制台的选项时,我得到了这个:

{ hostname: 'zipcodedistanceapi.redline13.com',
  port: 443,
  path: '/rest/my_api_key/radius.json/80549/15/mile',
  method: 'GET',
  secureProtocol: 'SSLv3_method',
  agent:
   { domain: null,
     _events: { free: [Function] },
     _maxListeners: 10,
     options: [Circular],
     requests: {},
     sockets: {},
     maxSockets: 5,
     createConnection: [Function: createConnection] } }

为什么不回复?

正在进行的代码

以下是基于mscdex答案的正在进行的代码。

var req = https.request(options, function(res) {
    var response = '';
    res.on('data', function(chunk) {
        response += chunk;
    });

    res.on('end', function() {
        var newObj = {
            zip: zipCode,
            codes: JSON.parse(response).zip_codes
        };

        coll.insert(newObj, function(err, item) {
            if (err) {
                callback(err);
            }
            else {
                console.log(item.codes);

                callback(null, item.codes);
            }
        });
    });
});
req.end();

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

1 个答案:

答案 0 :(得分:1)

这里缺少一些东西:

  • 您没有在请求对象上调用.end(),以便可以将请求发送到服务器。

  • 您应该从响应流中读取。