Как отправить данные буфера в экспресс? - PullRequest
0 голосов
/ 27 июня 2018

Я пытаюсь создать и отправить файл Excel клиенту. Клиент должен загрузить файл через ajax-запрос, потому что мне нужны параметры фильтра.

Я использую пакет excel4node для создания файла excel.

Я пишу код ниже, и сейчас он работает, но я подозреваю, что если у меня будут данные больше буфера. Это правильный способ использования буфера? (проверьте строку с методом writeToBuffer)

    const xl = require('excel4node');

    const excelCreator = function (data) {...}

    app.post('/api/excel', jsonParser, (req, res) => {

      let reqObj = {
        method: 'post',
        url: apiUrl + '/MemberService';,
        headers: {
          'Content-Type': 'application/json'
        },
        data: req.body
      };

      axios(reqObj)
        .then(response => {
          res.body = responseHandler(response); // a helper function to set res object

          let data = res.body.Data;

          res.setHeader('Content-Disposition', 'attachment; filename=' + 'excel.xlsx');
          res.type('application/octet-stream');
          res.body.Data = null;

          excelCreator(data).writeToBuffer().then(function (buffer) {
            res.body.Data = buffer;
            res.send(res.body);
          });

        })
        .catch(...);
    });

1 Ответ

0 голосов
/ 30 января 2019

Первая установка SheetJS js-xlsx

npm --save install xlsx

Тогда вы можете отправить этот ответ с Express:

const xlsx = require('xlsx')

var wb = xlsx.utils.book_new();

var table = [['a', 'b', 'c'], ['1', '2', '3']]
var ws = xlsx.utils.aoa_to_sheet(table);
xlsx.utils.book_append_sheet(wb, ws, 'test');

// write options
const wopts = { bookType: 'xlsx', bookSST: false, type: 'base64' };
const buffer = xlsx.write(wb, wopts);

res.writeHead(200, [['Content-Type', 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet']]);
res.end(new Buffer(buffer, 'base64'));

Не стесняйтесь проверять документы https://www.npmjs.com/package/xlsx

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...