S.D*_*.D. 10
Excel导出:
使用Streams.以下是可能做的大致的概念:
使用exceljs模块.因为它有一个针对这个确切问题的流API.
var Excel = require('exceljs')
Run Code Online (Sandbox Code Playgroud)因为我们正在尝试启动下载.将适当的标题写入响应.
res.status(200);
res.setHeader('Content-disposition', 'attachment; filename=db_dump.xls');
res.setHeader('Content-type', 'application/vnd.ms-excel');
Run Code Online (Sandbox Code Playgroud)创建由Streaming Excel writer支持的工作簿.给写入器的流是服务器响应.
var options = {
stream: res, // write to server response
useStyles: false,
useSharedStrings: false
};
var workbook = new Excel.stream.xlsx.WorkbookWriter(options);
Run Code Online (Sandbox Code Playgroud)现在,输出流媒体流都已设置完毕.对于输入流,更喜欢将查询结果/光标作为流提供的数据库驱动程序.
定义一个异步函数,将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);
});
}
Run Code Online (Sandbox Code Playgroud)现在,让我们使用async模块的mapSeries导出一些db表:
async.mapSeries(['cars','planes','trucks'],tableToSheet,function(err){
if(err){
// log error
}
res.end();
})
Run Code Online (Sandbox Code Playgroud)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);
Run Code Online (Sandbox Code Playgroud)
您现在正在将数据从数据库传输到HTTP响应,并将其转换为xls/csv格式.无需将整个数据缓冲或存储在内存或文件中.
| 归档时间: |
|
| 查看次数: |
3474 次 |
| 最近记录: |