今天在工作的时候接触到一个需求,就是现在有一个简单的后台管理系统是基于node.js来实现的,现在需要将其中的一个表格数据下载下来。乍一听还以为这个是一个简单的需求,以为只要简单的一个小时就能完成,没有想到直接花了我将近两个半小时并且还是在他人的帮助下实现的功能。下面就是具体的实现步骤
最主要的是使用的node的库node-xlsx。
npm环境下
node-xslx
npm install node-xlsx
node.js中的fs模块
npm install fs
具体的引入代码
let fs = require('fs'); let xlsx = require('node-xlsx');
app.get('/export', (req, res) => {
//生成Excel依赖包
const xlsx = require("node-xlsx");
//写入文件依赖包
var fs = require("fs");
const sql = `select * from student where delete_status=0`
db.query(sql, async (err, results) => {
if (err) {
return console.log(err.message)
}
// res.json(results);
const dataList = results.data;
console.log(results,"获取的dataList数据")
let list = [
{
name: "sheet",
data: [
//第一列是作为表头,先写死;后面的数据通过循环push到这个数组中
["购买人名称", "购买时间", "实际支付金额","兑换码","兑换码所属渠道/商家名称"],
],
},
];
for (let i = 0; i < results.length; i++){
console.log("++++++++++++++++++", results[i])
let name = results[i].name
let time = results[i].time
let money = results[i].money
let code = results[i].code
let business = results[i].business
let linshi = [name, time, money, code, businessName]
console.log('获取的新数组 :>> ', linshi);
list[0].data.push(linshi)
console.log('写入的数据 :>> ', list[0].data);
}
const buffer = xlsx.build(list);
fs.writeFile("详细数据.xlsx", buffer, function (err) {
if (err) {
console.log(err, "保存excel出错");
} else {
console.log("写入excel成功!!!");
}
});
res.body = buffer;
//将返回的buffer作为一个流返回给前端
res.set('Content-disposition', 'attachment; filename='+encodeURIComponent('文娱卡售卡明细表')+'.xlsx');
res.set('Content-type', 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
res.status(200).send(buffer)
})
})
这一步写完基本的数据就会写入到excel文件中,并且将excel文件作为一个流直接返回给前端
前端页面添加一个按钮,在按钮的点击事件中请求后台返回的excel表格数据
通过 window.open直接连接后台的接口数据访问后台返回过来的流,下载进行展示
async daochu() {
//这个
console.log(window.ip +":"+ window.port + '/export')
window.open(window.ip +":"+ window.port + '/export')
},
ip和port是主机id和请求端口,是在前端规定好的,可以选择写死也可以选择动态写入
以上就是基于node.js的后台管理系统的数据表格导出下载的实现全过程,如果还有什么更好的方法,可以一起沟通沟通