Как использовать fs и JSONStream для записи огромного файла без триггера RangeError: превышен максимальный размер стека вызовов - PullRequest
0 голосов
/ 11 июля 2020

Я здесь пытался заменить JSON .stringify () чем-то другим, чтобы избежать RangeError. И я нашел способ ниже.

Это мой код: (Я использую модуль big- json, и этот модуль реализует json -stream-stringify for stringify)

const data = generateData();       
                   
const stringifyStream = json.createStringifyStream({  
    body: data
});

stringifyStream.on('data', function(str) {
    console.log(str.toString());
})

Я пытался напечатать str, он будет печатать данные строкового типа построчно, мой вопрос: как записать полный str в файл? Я попытался добавить fs.writefileSync() после console.log(), и он будет писать только в последней строке str. Извините, я новичок в стриме и node.js. Не знаю, как это исправить.

Другой вопрос, могу ли я найти способ переформатировать строку вывода, как это делал JSON.stringify(data, null, 2)?

К вашему сведению: данные - это действительно глубокий объект. Циркуляра нет, но может быть повторяющаяся часть. И я предпочитаю оставлять все без изменений и не обрезать.

Очень ценю любую помощь! Спасибо за ваше время.

1 Ответ

0 голосов
/ 11 июля 2020

Вы пробовали отделить JSON .stringify от fs.writeFileSyn c? просто чтобы знать, у кого на самом деле проблемы.

Если это JSON .stringify, я предлагаю вам фрагментировать объект на несколько или отфильтровать то, что вы используете. Все, что вы можете сделать, чтобы уменьшить фактические данные. Мы не знаем, что такое данные на самом деле, поэтому я не могу делать предположений об этом, но у вас никогда не бывает таких проблем, если это вызвано слишком большими данными, вы делаете что-то неправильно!

Если проблема - это fs.writeFileSyn c, и у вас есть JSON stringified, затем попробуйте использовать fs.createWriteStream для записи данных.

...