Отправить записываемый поток как экспресс-узел вложения
Я создаю книгу xlsx с использованием модуля exceljs, а затем хочу отправить ее в виде вложения через мое промежуточное программное обеспечение Express.
Я создаю и сохраняю свою книгу в потоке, используя следующий код, как показано в документации модуля
var stream = fs.createWriteStream('test.xlsx');
// write to a stream
workbook.xlsx.write(stream)
.then(function() {
// done
});
где поток является записываемым потоком.
Моя проблема в том, что я не могу понять, как обрабатывать поток для его отправки. Попытка передать это в отпуск stream.pipe(res)
выдает ошибку, которая не читается потоком, чтобы передать его.
Каков наилучший курс действий для меня сейчас?
PS Я мог бы сохранить его в файл на сервере, а затем прочитать файл и отправить его через экспресс. Это не помогло бы мне, поскольку привязанность не нужна впоследствии, и это обходной путь, который мне не нравится.
2 ответа
Если у вас есть поток, вы можете сделать следующее, чтобы отправить его в виде вложения в экспресс:
res.attachment('yourfile.xlsx');
stream.pipe(res);
Вы можете использовать потоковый XLSX Writer по умолчанию в Exceljs.
// construct a streaming XLSX workbook writer with styles and shared strings
var options = {
stream: res // stream to server response
};
var workbook = new Excel.stream.xlsx.WorkbookWriter(options);
Согласно документу, конструктор принимает необязательный объект параметров со следующими полями:
stream
: Указывает доступный для записи поток для записи рабочей книги XLSX.filename
: Если поток не указан, в этом поле указывается путь к файлу, в который записывается книга XLSX.