Запись страницы в файл node.js
Есть страница google spreadsheets. Гугл эксель, проще говоря. Я подгружаю страницу через needle, а потом записываю fs.writeFileSync('./table.html', spreadsheetsHtml, {encoding: 'utf8'});. Но записывается почему-то с ошибками Гру��па. Беда в том, что needle выдаёт уже такой текст с ошибками. Но, насколько я знаю, он автоматически определяет кодировки. В чем проблема?
const needle = require('needle')
const fs = require('fs');
needle.get('https://docs.google.com/spreadsheets/d/e/2PACX-1vQXRLX-aofeNtFqYUdnZEmOFmyW2mCjpOaoqLzpUPn1mKhLjDaLRXA3XjRXWpxWyXKMumMPOZ0cvnOu/pubhtml?gid=1239914093&single=true', function(error, response) {
if (!error && response.statusCode == 200){
fs.writeFileSync('./table.html', spreadsheetsHtml, {encoding: 'utf8'});
}
});
Ответы (1 шт):
В документации needle написано:
needle returns a
readableStreamobject
и это очень удобно, так как readableStream - фундаментальная штуковина в node.js.
Возвращает поток? Значит будет писать этот поток прямо в файл, без всяких дополнительных ухищрений - node.js best practices!
const path = require('path');
const fs = require('fs');
const needle = require('needle');
const filepath = path.join(__dirname, 'spreadsheet.html');
const fileStream = fs.createWriteStream(filepath);
const spreadsheetsStream = needle.get(
'https://docs.google.com/spreadsheets/d/e/2PACX-1vQXRLX-aofeNtFqYUdnZEmOFmyW2mCjpOaoqLzpUPn1mKhLjDaLRXA3XjRXWpxWyXKMumMPOZ0cvnOu/pubhtml?gid=1239914093&single=true'
);
spreadsheetsStream.on('error', console.error);
fileStream.on('error', console.error);
spreadsheetsStream.pipe(fileStream);
Обратите внимание, что работа с потоками сильно отличается от fs.writeFileSync, так что вам прийдётся подписаться на событие finish или close, чтобы дождаться окончания записи файла. Я показывал как это делать в этом ответе.