HTTP GET生成Excel工作簿,使用Express进行响应,然后自动下载文件?

我正在构build我的第一个自定义NodeJS服务器,并希望就如何实现以下过程提供一些指导和build议:

  1. 客户端使用一些查询参数向服务器发送HTTP GET请求
  2. 根据查询参数查询MongoDB(使用Mongoose)
  3. 从生成的MongoDB数据中生成Excel工作簿
  4. 该文件作为HTTP响应发送到客户端(使用Express)
  5. 客户端浏览器收到响应后自动开始下载Excel工作簿文件。

第3-5部分我特别迷失。 我不知道我应该使用什么工具来生成带有Node的服务器上的Excel工作簿,哪种方式最好将Excel文件作为HTTP响应发送,或者如何使客户端浏览器开始下载接收到的文件。

谢谢!

请检查: https : //www.npmjs.com/package/excel-export

在这个模块介绍页面中,有一个非常好的例子来说明如何:

  • 使用excel-export生成excel文件内容。
  • 通过Express将Excel文件内容发送到浏览器。
  • 让浏览器通过Content-Disposition自动下载excel文件

以下是页面上的示例代码:

 var express = require('express'); var nodeExcel = require('excel-export'); var app = express(); app.get('/Excel', function(req, res){ var conf ={}; conf.stylesXmlFile = "styles.xml"; conf.name = "mysheet"; conf.cols = [{ caption:'string', type:'string', beforeCellWrite:function(row, cellData){ return cellData.toUpperCase(); }, width:28.7109375 },{ caption:'date', type:'date', beforeCellWrite:function(){ var originDate = new Date(Date.UTC(1899,11,30)); return function(row, cellData, eOpt){ if (eOpt.rowNum%2){ eOpt.styleIndex = 1; } else{ eOpt.styleIndex = 2; } if (cellData === null){ eOpt.cellType = 'string'; return 'N/A'; } else return (cellData - originDate) / (24 * 60 * 60 * 1000); } }() },{ caption:'bool', type:'bool' },{ caption:'number', type:'number' }]; conf.rows = [ ['pi', new Date(Date.UTC(2013, 4, 1)), true, 3.14], ["e", new Date(2012, 4, 1), false, 2.7182], ["M&M<>'", new Date(Date.UTC(2013, 6, 9)), false, 1.61803], ["null date", null, true, 1.414] ]; var result = nodeExcel.execute(conf); res.setHeader('Content-Type', 'application/vnd.openxmlformats'); res.setHeader("Content-Disposition", "attachment; filename=" + "Report.xlsx"); res.end(result, 'binary'); }); app.listen(3000); console.log('Listening on port 3000'); 

3.点使用这样的npm包

Js代码

  /* Read Excel */ mongoXlsx.xlsx2MongoData("./file.xlsx", model, function(err, mongoData) { console.log('Mongo data:', mongoData); }); 

请参阅链接mongo-xlsx

对于第5点使用以下

  var http = require('http'); var fs = require('fs'); var file = fs.createWriteStream("file.jpg"); var request = http.get("./file.xlsx", function(response) { response.pipe(file); }); 

你必须保持这个代码在你的APIcallback函数