【问题标题】:node JSON https request becoming undefined节点 JSON https 请求变得未定义
【发布时间】:2016-04-11 06:29:20
【问题描述】:

我正在尝试向 API 发送单个 https 请求,其中包含大量 JSON 格式的数据。

但是,在运行代码时,我首先遇到了一切未定义的问题。我注释掉了我的循环,试图解析我需要的数据,现在我只是试图 console.log 所有的数据。

但是,尽管我的代码中不再有循环,但它似乎仍在以某种方式循环。

这是我的请求的代码:

function getCards() {
  // make a request
  var options = {
    host: 'omgvamp-hearthstone-v1.p.mashape.com',
    path: '/cards',
    method: 'GET',
  };

  var req = https.request(options, function(res) {
    console.log('STATUS ' + res.statusCode);
    console.log('HEADERS ' + JSON.stringify(res.headers));
    res.setEncoding('utf8');
    res.on('data', function(data) {
      //console.log(data);
      updateCardsCollection(JSON.stringify(data));
    });
  });

  req.on('error', function(e) {
    console.log('problem with request: ' + e.message);
  });

  req.end();
}

奇怪的是,上面代码中的console.log(data),把所有的数据都注销了就好了。

function updateCardsCollection(data) {
  var cardsRaw = [];
  console.log("DATA");
  console.log("===========================================================");
  console.log(data.Classic);
}

这里的“经典”是 API 中的对象数组之一。

在实现node、express、mongoose和jade之前。以下循环可以很好地解析数据:

   for(var key in data) {
     for(var i = 0; i < data[key].length; i++) {
       console.log(data[key][i].cardId);

但是,上述循环的开头也会打印出未定义的错误。

我似乎在使用此代码时遇到的另一个奇怪问题是,当我在循环注释掉的情况下运行它时,'updateCardsCollection' 函数中只有 3 个 console.logs。它记录了这 3 行很多次。尽管该函数只被调用一次。

知道为什么这段代码不再适用于获取我的 API 数据吗?

【问题讨论】:

    标签: javascript json node.js httprequest


    【解决方案1】:

    首先,如果您想使用对象而不是字符串,则在尝试更新集合时,您需要使用 JSON.parse 而不是 JSON.stringify。

    但是,如果您先完成,您的代码仍然无法工作,因为在 data 处理程序中,您会得到 chunked 数据,而不是完整的响应。请参阅https://nodejs.org/api/http.html#http_http_request_options_callback。

    你必须像这样积累数据:

    const req = https.request(options, res => {
        const data = [];
        res.on('data', d => data.push(d));
        res.on('end', () => updateCardsCollection(JSON.parse(data.join(''))));
    })
    

    【讨论】:

    • 这很棒!谢谢你。如果其他人偶然发现了这个问题。上面的代码缺少 2 个括号',data.join(''))))* 之后应该有 4 个,最后一个花括号之后应该有 1 个。除此之外,它完美无缺!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-16
    • 1970-01-01
    • 1970-01-01
    • 2020-10-16
    • 2020-06-01
    • 1970-01-01
    相关资源
    最近更新 更多