0

调用 Riot-Api 我在 https GET 请求上接收到不完整的 JSON。

调试后,我意识到根据我等待(断点)预执行 https on'data' 回调的时间,我实际上收到了完整的 JSON 对象。

(我的平均 API 响应时间是 200-300 毫秒)

let getOptions = function(url) {
  return {
    host:  'na.api.pvp.net',
    port: 443,
    path: `${url}?api_key=${apiKey}`,
    method: 'GET'
  };
}

exports.Call = function(url, callback) {
  let response = {};

  let req = https.request(getOptions(url), function(res) {
    response.statusCode = res.statusCode;
    res.on('data', function(data) {
      response.json = JSON.parse(data);
      callback(response);
    });
  });

  req.on('error', function(err) {
    response.err = err;
    callback(response);
  }); 

  req.end();
};

在没有断点的情况下运行代码或只中断很短的时间我会遇到错误:

JSON.parse(data): Unexpected Token in JSON at position ...

或者

JSON.parse(data): Unexptected end of JSON Input.

正如我期望的那样,只有在请求完成后才会执行“数据”回调,我对如何修复它感到困惑(没有人为地延迟它)。

4

1 回答 1

1

http.request返回一个——它不是一个包含整个响应的简单回调。如果要解析整个响应,则必须缓冲并连接所有内容。

我强烈建议使用像gotrequest这样的辅助库

于 2017-02-19T15:59:44.870 回答