Отправить записываемый поток как экспресс-узел вложения

Я создаю книгу 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.
Другие вопросы по тегам