2016-04-11 7 views
0

APIに単一のhttpsリクエストを送信しようとしています。多数のデータがJSON形式で送信されています。node JSON httpsリクエストが未定義になる

しかし、コードを実行すると、まずすべてが定義されていないという問題が発生しました。私は自分のループをコメントアウトし、必要なデータを解析しようとしましたが、今はすべてのデータを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(データ)は、うまくデータをすべてログアウトしていることです。

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

ここで、「クラシック」は、API内のオブジェクトの配列の1つです。

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データを取得するために機能しなくなった理由は何ですか?

答えて

2

文字列ではなくオブジェクトで作業する場合は、最初にJSON.stringifyの代わりにJSON.parseを実行してコレクションを更新する必要があります。

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('')))); 
}) 
+0

これは素晴らしい仕事を!ありがとうございました。 誰かがこの質問につまずく場合。上記のコードには、2つの括弧が欠落しています。 'data.join(' '))))*)の後に4があり、最後の中括弧の後に1つあります。それ以外は完全に動作します! – MLyck

関連する問題