node.js导出csv文件

前言:此功能实现环境:express,node.jsV7,es6,json2csv。此文只为抛砖引玉,大神轻喷,有更好的代码实现方法欢迎讨论。
首先创建一个express框架项目:

express demo

如果没有安装express命令的同学可以执行一下命令安装:

npm install express-generator -g

(如果你说你没有npm命令,那...我只能说同学你走错片场了。)

然后执行命令安装json2csv模块:

npm install json2csv

以上完成,进入正题。

创建一个文件,CsvUtil.js


const json2csv= require('json2csv');

let response=null;

//开始下载前调用该方法设置http头

const beforeDownLoadCsv = async (res,fileName) => {

response=res;

await response.setHeader('Content-disposition',`attachment; filename=`+encodeURIComponent(fileName)+'.csv');

await response.writeHead(200,{'Content-Type':'text/csv;charset=utf-8'});

}

//调用该方法分批写入数据到csv文件

const downLoadCsv = async (data,fields,header,flag) => {

if(data.length===0) {

let obj = {}

fields.forEach(v=>obj[v]=' ')

data.push(obj)

}

let csv =json2csv({data: data,fields: fields,fieldNames:header,del:',\t',quotes:''})

let lastItem = header[header.length-1]

flag  &&  (csv = csv.substr((csv.indexOf(lastItem)+lastItem.length+1),csv.length))

csv = Buffer.concat([newBuffer('\xEF\xBB\xBF','binary'),newBuffer(csv)])

awaitresponse.write(csv)

awaitresponse.write('\n')

}

const stopDownLoadCsv = async() =>{

await response.end();

}

module.exports= {

beforeDownLoadCsv,

downLoadCsv,

stopDownLoadCsv

}

使用示例(express默认生成项目 routes/index.js):


const CsvUtil=require('../lib/CsvUtil.js');

router.get('/',async function(req,res,next) {

let head=['哈哈','呵呵'];

let fields=['a','b'];

let fileName='测试';

let flag=true;

await CsvUtil.beforeDownLoadCsv(res,fileName);

let data;

let obj;

for(let i=0;i<=100;i++){

data=[];

obj={};

obj.a=i+1;

obj.b=i+2;

data.push(obj);

flag=await CsvUtil.downLoadCsv(data,fields,head,!flag);

}

await CsvUtil.stopDownLoadCsv();

});

你可能感兴趣的:(node.js导出csv文件)