2017-02-19 12 views
0

https GET要求で不完全なJSONを受け取ったRiot-Api Imの呼び出し。Node.jsでの不完全なJSON応答https-module

デバッグ後、実際に完全なJSONオブジェクトを受け取っている https on'data 'コールバックImを事前に実行して待っている(ブレークポイント)かどうかに応じて変化することがわかりました。

let getOptions = function(url) { 
    return { 
    host: 'na.api.pvp.net', 
    port: 443, 
    path: `${url}?api_key=${apiKey}`, 
    method: 'GET' 
    }; 
} 

exports.Call = function(url, callback) { 
    let response = {}; 

    let req = https.request(getOptions(url), function(res) { 
    response.statusCode = res.statusCode; 
    res.on('data', function(data) { 
     response.json = JSON.parse(data); 
     callback(response); 
    }); 
    }); 

    req.on('error', function(err) { 
    response.err = err; 
    callback(response); 
    }); 

    req.end(); 
}; 

ブレークポイントなしでコードを実行するか、私だけがエラーにどちらかの実行短い時間を壊す(私のために平均APIの応答時間は200-300msがある):

JSON.parse(data): Unexpected Token in JSON at position ... 

または

JSON.parse(data): Unexptected end of JSON Input. 

リクエストが完了した後にのみ 'data'コールバックが実行されると期待しています。私はaboを混乱させました(人工的にそれを遅らせることなく)それを修正する方法。

+0

のようなヘルパーライブラリを使用するrecommentでしょうか?データの 'JSON.parse'を取り除こうとしてください。 – Edgar

+0

@Edgar私は元のバッファを元に戻し、ときにはJSONの書式設定に成功することさえあります。 –

答えて

0

http.requestは、応答全体を含む単純なコールバックではなく、streamを返します。 応答全体を解析する場合は、buffer and concatenateすべてにする必要があります。

私は強くたぶん応答がすでにJSON形式を持っており、それを解析する必要はありませんgotまたはrequest

+0

木のための森林を見ることができません..ありがとうたくさん - 今のところ要求を使用して:) –

関連する問題