当前位置: 首页 > news >正文

基于Node.js的后台管理系统的数据表格导出下载

基于Node.js的后台管理系统的数据表格导出下载

今天在工作的时候接触到一个需求,就是现在有一个简单的后台管理系统是基于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');

第二步写sql语句,查询需要下载的数据

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].namelet time = results[i].timelet money = results[i].moneylet code = results[i].codelet business = results[i].businesslet 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的后台管理系统的数据表格导出下载的实现全过程,如果还有什么更好的方法,可以一起沟通沟通

http://www.lryc.cn/news/116234.html

相关文章:

  • 渗透攻击方法:原型链污染
  • 第四章 kernel函数基础篇
  • JVM:运行时数据区域(白话文)
  • Go语言并发编程(千锋教育)
  • CSS革命:用Sass/SCSS引领前端创新
  • MAPPO 算法的深度解析与应用和实现
  • API接口的涉及思路以及部分代码
  • Stable Diffusion无需代码连接QQ邮箱的方法
  • Excel表格(一)
  • 详细介绍渗透测试与漏洞扫描
  • Scikit-learn聚类方法代码批注及相关练习
  • C#程序的启动显示方案(无窗口进程发送消息) - 开源研究系列文章
  • java泛型和通配符的使用
  • 【网络】自定义协议 | 序列化和反序列化 | 以tcpServer为例
  • 06-3_Qt 5.9 C++开发指南_多窗体应用程序的设计(主要的窗体类及其用途;窗体类重要特性设置;多窗口应用程序设计)
  • (力扣)用两个栈实现队列
  • 【自动化测试框架】关于unitttest你需要知道的事
  • 手机便签中可以打勾的圆圈或小方块怎么弄?
  • 【Linux】gdb 的使用
  • C++11之右值引用
  • 【PHP的设计模式】
  • React 之 Redux - 状态管理
  • 集合转数组
  • 使用Python将Word文档转换为PDF的方法
  • Java 判断一个字符串在另一个字符串中出现的次数
  • 设计模式十三:代理(Proxy Pattern)
  • Redis基础 (三十八)
  • maven中的scope
  • 【网络基础实战之路】实现RIP协议与OSPF协议间路由交流的实战详解
  • CNN(四):ResNet与DenseNet结合--DPN