Javascript 节点JSON https请求变得未定义

Javascript 节点JSON https请求变得未定义,javascript,json,node.js,httprequest,Javascript,Json,Node.js,Httprequest,我试图向API发送一个https请求,其中包含一组JSON格式的数据 然而,在运行代码时,我首先遇到了一个问题,即所有内容都未定义。我注释了我的循环,试图解析我需要的数据,而现在我只是尝试console.log所有数据 然而,尽管在我的代码中没有任何循环,它似乎仍然在某种程度上循环 以下是我请求的代码: function getCards() { // make a request var options = { host: 'omgvamp-hearthstone-v1.p.m

我试图向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);
}
这里的“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);
for(变量输入数据){
对于(var i=0;i
但是,上面循环的开头也会打印出一个未定义的错误

这段代码的另一个奇怪问题是,我在运行它时注释掉了循环,只使用了'updateCardsCollection'函数中的3个console.logs。它记录了这3行代码很多次。尽管该函数只调用了一次


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

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

但如果先处理完,代码仍然不起作用,因为在
数据
处理程序中,您得到的是
分块的
数据,而不是完整的响应。有关详细信息,请参阅

您必须像这样累积数据:

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

这太棒了!谢谢。如果其他人偶然发现了这个问题。上面的代码有两个括号“data.join(“”))*后面应该有4个,最后一个大括号后面应该有一个。除此之外,它工作得非常好!