使用Node.js https-module进行不完整的JSON响应

时间:2017-02-19 12:52:46

标签: node.js https riot-games-api

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

经过调试,我意识到我要等多少等待(断点)预执行 https on'data'回调我实际上收到了完整的JSON对象。

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

albumName

运行没有断点的代码或只是短时间内我运行错误:

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

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

1 个答案:

答案 0 :(得分:0)

MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow) { ui->setupUi(this); a = new QPushButton(this); connect(a, SIGNAL (clicked()),this, SLOT (clickedSlot())); } void MainWindow::clickedSlot() { QProgressBar *prog = new QProgressBar(this); QListWidgetItem *it; it = new QListWidgetItem(ui->listWidget); ui->listWidget->insertItem(ui->listWidget->size().height(),it); it->setSizeHint(QSize(200,50)); ui->listWidget->setItemWidget(it, prog); } 返回stream - 它不是一个包含整个响应的简单回调。 如果要解析整个响应,则必须buffer and concatenate

我强烈建议您使用辅助库,例如gotrequest