Excel导出:
使用流。以下是一个大概的想法:
res.status(200); res.setHeader('Content-disposition', 'attachment; filename=db_dump.xls'); res.setHeader('Content-type', 'application/vnd.ms-excel');
- 创建一个由Streaming Excel writer支持的工作簿。提供给writer的流是服务器响应。
var options = { stream: res, // write to server response useStyles: false, useSharedStrings: false }; var workbook = new Excel.stream.xlsx.WorkbookWriter(options);
现在,所有输出流均已设置。对于输入流,最好使用将查询结果/光标作为流提供的DB驱动程序。
定义将1个表转储到1个工作表的异步函数。
var tableToSheet = function (name, done) { var str = dbDriver.query('SELECt * FROM ' + name).stream(); var sheet = workbook.addWorksheet(name); str.on('data', function (d) { sheet.addRow(d).commit(); // format object if required }); str.on('end', function () { sheet.commit(); done(); }); str.on('error', function (err) { done(err); }); }
- 现在,让我们使用异步模块的mapSeries导出一些数据库表:
async.mapSeries(['cars','planes','trucks'],tableToSheet,function(err){ if(err){ // log error } res.end(); })
CSV导出:
对于单个表/收集模块的CSV导出,可以使用fast-csv:
// response headers as usual res.status(200); res.setHeader('Content-disposition', 'attachment; filename=mytable_dump.csv'); res.setHeader('Content-type', 'text/csv'); // create csv stream var csv = require('fast-csv'); var csvStr = csv.createWriteStream({headers: true}); // open database stream var dbStr = dbDriver.query('SELECt * from mytable').stream(); // connect the streams dbStr.pipe(csvStr).pipe(res);
现在,您正在将数据从数据库流式传输到HTTP响应,并快速将其转换为xls / csv格式。无需将全部数据缓冲或存储在内存或文件中。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)