不完整的节点HTTP.Response

我的应用程序build立一个需要连接的自定义整数数组,以创build经济数据的dynamic请求。

一旦我的variables选项被创build,我通过一个http请求推送它,并尝试parsing响应,在那里我得到一个错误 –

SyntaxError: Unexpected end of JSON input at JSON.parse (<anonymous>) 

当我使用我的代码来读取正文时,响应提前切断,并且在console.log()中没有得到完整的响应。

我已经testing了请求值,并将结果放在我的search栏中,并取得了积极的结果。

任何想法,为什么身体的反应被缩短? 我需要从这个请求中读取所有的数据,并在parsing的时候得到错误。

这是代码 –

 var options = { host: 'api.eve-central.com', port: 80, path: '/api/marketstat/json?typeid=18&typeid=19&typeid=20&typeid=21&typeid=22&typeid=34&typeid=35&typeid=36&typeid=37&typeid=38&typeid=39&typeid=40&typeid=41&typeid=42&typeid=43&typeid=44&typeid=45&typeid=49&typeid=50&typeid=51&typeid=52&typeid=164&typeid=165&typeid=166&typeid=178&typeid=179&typeid=180&typeid=181&typeid=182&typeid=183&typeid=184&typeid=185&typeid=186&typeid=187&typeid=188&typeid=189&typeid=190&typeid=191&typeid=192&typeid=193&typeid=194&typeid=195&typeid=196&typeid=197&typeid=198&typeid=199&typeid=200&typeid=201&typeid=202&typeid=203&typeid=204&typeid=205&typeid=206&typeid=207&typeid=208&typeid=209&typeid=210&typeid=211&typeid=212&typeid=213&typeid=215&typeid=216&typeid=217&typeid=218&typeid=219&typeid=220&typeid=221&typeid=222&typeid=223&typeid=224&typeid=225&typeid=226&typeid=227&typeid=228&typeid=229&typeid=230&typeid=231&typeid=232&typeid=233&typeid=234&typeid=235&typeid=236&typeid=237&typeid=238&typeid=239&typeid=240&typeid=241&typeid=242&typeid=243&typeid=244&typeid=245&typeid=246&typeid=247&typeid=248&typeid=249&typeid=250&typeid=251&typeid=252&typeid=253&typeid=254&usesystem=30000142', method: 'GET' } function requester(options) { http.request(options, function (res) { //console.log('STATUS: ' + res.statusCode); //console.log('HEADERS: ' + JSON.stringify(res.headers)); res.setEncoding('utf8'); res.on('data', function (chunk) { console.log('BODY: ' + chunk); var payload = JSON.parse(chunk); //console.log('After Parse: ' + payload); //Separating the payload into three pieces. buy = payload[0]["buy"]; all = payload[0]["all"]; sell = payload[0]["sell"]; }); }).end(); }; 

编辑:从代码中删除将干扰testing的variables。

在执行parsing之前,您需要累积stream式传输的数据,因为构成数据块的数据由io速率决定。

而是存储所有的分块数据,然后parsing它

 var options = { host: 'api.eve-central.com', port: 80, path: '/api/marketstat/json?typeid=18&typeid=19&typeid=20&typeid=21&typeid=22&typeid=34&typeid=35&typeid=36&typeid=37&typeid=38&typeid=39&typeid=40&typeid=41&typeid=42&typeid=43&typeid=44&typeid=45&typeid=49&typeid=50&typeid=51&typeid=52&typeid=164&typeid=165&typeid=166&typeid=178&typeid=179&typeid=180&typeid=181&typeid=182&typeid=183&typeid=184&typeid=185&typeid=186&typeid=187&typeid=188&typeid=189&typeid=190&typeid=191&typeid=192&typeid=193&typeid=194&typeid=195&typeid=196&typeid=197&typeid=198&typeid=199&typeid=200&typeid=201&typeid=202&typeid=203&typeid=204&typeid=205&typeid=206&typeid=207&typeid=208&typeid=209&typeid=210&typeid=211&typeid=212&typeid=213&typeid=215&typeid=216&typeid=217&typeid=218&typeid=219&typeid=220&typeid=221&typeid=222&typeid=223&typeid=224&typeid=225&typeid=226&typeid=227&typeid=228&typeid=229&typeid=230&typeid=231&typeid=232&typeid=233&typeid=234&typeid=235&typeid=236&typeid=237&typeid=238&typeid=239&typeid=240&typeid=241&typeid=242&typeid=243&typeid=244&typeid=245&typeid=246&typeid=247&typeid=248&typeid=249&typeid=250&typeid=251&typeid=252&typeid=253&typeid=254&usesystem=30000142', method: 'GET' } function requester(options) { http.request(options, function (res) { res.setEncoding('utf8'); // Build response body in a string var resBody = ''; // Listen for data and add res.on('data', function (chunk) { resBody += chunk }); res.on('end', function () { // Now that the response is done streaming, parse resBody var payload = JSON.parse(resBody); //Separating the payload into three pieces. buy = payload[0]["buy"]; all = payload[0]["all"]; sell = payload[0]["sell"]; itemStats.hiBuy = buy["max"]; itemStats.loSel = sell["min"]; itemStats.iskSpread = itemStats.loSel - itemStats.hiBuy; //Adjusted the spread calculation for station trading. itemStats.perSpread = itemStats.iskSpread / itemStats.loSel; itemStats.buyVol = buy["volume"]; itemStats.selVol = sell["volume"]; itemStats.allVol = all["volume"]; itemStats.buyPerHR = itemStats.buyVol / 24; itemStats.selPerHR = itemStats.selVol / 24; console.log("Transferred Values" + JSON.stringify(itemStats)); }); }); }; 

您正在parsing一个块,您需要在parsing数据之前先读取所有块:

 let data = ''; res.on('data', function (chunk) { data += chunk; }); res.on('end', function() { let payload = JSON.parse(data); });