Запрос nodejs - сбой toString - проблема размера буфера для больших файлов (maxBufferSize)
Я запрашиваю большой файл с 150K записей, но он выдает ошибку "toString failed". nodejs / node # 3175 говорит, что это из-за maxBufferSize. Запрос работает хорошо для 200 записей, но это внешний API, и требование состоит в том, чтобы получить все записи одновременно.[Нет нумерации страниц:( ] Есть ли способ установить размер буфера для этого запроса?
Я уже задавал этот вопрос здесь
РЕДАКТИРОВАТЬ:
request("http://www.site-containing-big-data/api",
function (error, response, body) {
console.log('got something to show');
if(!error && response.statusCode == 200) {
resolve(body);
}else if(error){
reject(error);
}
});
но в консоли ничего не отображается, кроме toString failed
сообщение
1 ответ
Решение
Решил это. Это был XML-файл, и я пытался обработать его напрямую. Теперь я сначала сохраняю в файл, а затем использую xml-stream
обрабатывать каждый объект по одному.
request.get("http://www.site-containing-big-data/api" )
.on('error', function(errReq) {
console.log('error while reading from big site : ', errReq);
}).on('end', function(){
console.log('got from big site, now processing');
var XmlStream = require('xml-stream') ;
var stream=fs.createReadStream('bigfile.xml');
xml = new XmlStream(stream);
xml.on('endElement: item', function(item) {//item is a node. structure is <items><item></item><item></item></items>
//do something here
});
xml.on('end', function(){
// when processing finished for all objects/items in that file
});
});
})
.pipe(fs.createWriteStream('bigfile.xml'));