小弟我才开始写博客,如果不合理之处请提出来,我改之,本文是关于nodejs中利用csv做文件的导出功能,在该例子中主要利用了fast-csv包对数据进行导出为csv文件格式,由于最近在做一个关于nodejs导出的excel的功能,在网上找了很久都没有找到合适的文档,最后找到了关于csv的导出,下面是关于nodejs代码
接下来的代码是关于csv导出的js,其中首先需要导包:fast-csv和fs包;
var fs = require("fs");
var csv = require("fast-csv");
module.exports = {
/**
*
* @param req:request
* @param res:response
* @param getTitle:获取excel的第一行名称
* @param rows:每一行数据,用json数组表示
* @param filezName:导出文件名
*/
downLoad:function(req,res,getTitle,rows,fileName){
//用于判断是否是最后一个数据信息
var endLine = false;
var stream = null;
var argus = process.argv.splice(2);
if(!argus || argus.length == 0){
stream = fs.createWriteStream("D:/temp.csv");
}else{
stream = fs.createWriteStream(argus[0]);
}
stream.on("finish", function(){
res.download('D:/temp.csv',fileName+'.csv',function(){
fs.unlinkSync('D:/temp.csv'); //删除临时文件
});
});
//生成头部
var csvStream = csv.format({headers: true})
.transform(getTitle);
csvStream.pipe(stream);
rows.forEach(function(row){
csvStream.write(row);
});
//关闭写入
csvStream.end(function(){
console.log("end");
});
}
}
在最后附上调用该js文件的例子,该例子是写在router路由里面的,当页面点击导出的时候执行的代码,如下
var express = require('express');
var router = express.Router();
var fs = require("fs");
var downLoadUtil = require('../download');//这里引用
router.get('/exportCsv', function(req, res, next) {
downLoadUtil.downLoad(req,res,function(row){
return {"编号":row.id,"名称":row.name,"姓名":row.title};
},[{id:1,name:'test',title:'title1'},{id:2,name:'test',title:'title2'},{id:3,name:'test',title:'title3'}],'testFile')
});
module.exports = router;
在上面的代码中function(row){return {"编号":row.
id,"名称":row.
name,"姓名":row.
title}返回的是csv文件的第一行表头,[{
id:1,
name:'test',
title:'title1'},{id:2,name:'test',title:'title2'}]表示输出在csv文件中的内容。
注意:上面颜色相同的部分名称一定要一样,而且rows是一个json数组;
csv输出文件内容格式如下:
编号 | 名称 | 姓名 |
1 | test | title1 |
2 | test | title2 |