Node js excel导出:下载文件而不创建文件

时间:2018-08-02 12:55:38

标签: javascript node.js express

我正在尝试使用fast-csv在我的应用程序中实现excel导出。

这是出口流程

1)从数据库中获取数据。

2)准备并下载excel

function export(req, res) {
  let path = "sample.csv";

  exportService.exportExcel(
    {
      path: path,
      data: data,
    },
    status => {
      res.download(path);
    },
  );
}

ExportService

function exportExcel(params, callback) {
  csv.writeToPath(params.path, params.data, { headers: true }).on("finish", function() {
    console.log("done");
    callback(true);
  });
}

这很好用,但是此方法有一个缺点,那就是需要在下载之前写入文件,有什么方法可以避免这种临时写入或从文件夹下载后删除文件

2 个答案:

答案 0 :(得分:0)

  1. 第一种方法(不确定):: 只是在res.send中输出csv,且Content-Disposition标头设置为“ attachment; filename = filename.csv” ,然后下载
  2. 第二种方法:: ,您可以使用客户端javascript将JSON转换为csv。然后,您可以使浏览器将该文件以csv格式下载

答案 1 :(得分:0)

最快的方法是将csvWriteStream通过管道传输到res。

function(req, res) {
  res.setHeader('Content-Type', 'text/csv');
  var data = [
    {a: "a1", b: "b1"},
    {a: "a2", b: "b2"}
  ];

  var csvStream = csv.createWriteStream({headers: true})
    .transform(function(row, next){
      setImmediate(function(){
        next(null, {A: row.a, B: row.b});
      });
    })

  csvStream.pipe(res)
  data.map(function(row) { csvStream.write(row) })
  csvStream.end()
});