使用 Node.js https 模块的 JSON 响应不完整

Incomplete JSON response with Node.js https-module

调用 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.

因为我希望 'data' 回调仅在请求完成后执行,我对如何修复它感到困惑(没有人为地延迟它。)。

http.request returns a stream – 它不是包含整个响应的简单回调。 如果要解析整个响应,则必须 buffer and concatenate 一切。

我强烈建议使用像 got or request

这样的辅助库