gpt4 book ai didi

javascript - Node JSON https 请求变得未定义

转载 作者:行者123 更新时间:2023-11-30 12:01:27 26 4
gpt4 key购买 nike

我正在尝试向 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.log。它多次记录这 3 行。尽管该函数只被调用一次。

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

最佳答案

首先,如果您想使用对象而不是字符串,则在尝试更新集合时需要执行 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(''))));
})

关于javascript - Node JSON https 请求变得未定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36541337/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com