Javascript 节点JSON https请求变得未定义
我试图向API发送一个https请求,其中包含一组JSON格式的数据 然而,在运行代码时,我首先遇到了一个问题,即所有内容都未定义。我注释了我的循环,试图解析我需要的数据,而现在我只是尝试console.log所有数据 然而,尽管在我的代码中没有任何循环,它似乎仍然在某种程度上循环 以下是我请求的代码: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
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个,最后一个大括号后面应该有一个。除此之外,它工作得非常好!