express中实现将mysql中的数据导出为excel

express中实现将mysql中的数据导出为excel

安装node-excel

cnpm install node-xlsx -S

在这里插入图片描述

封装公用的导出方法

/*** 查询* @param tableName: 表名* @param sqlJson:需要拼接的SQL* @returns {Promise<unknown>}*/
const find = (tableName, sqlJson) => {return new Promise((resolve, reject) => {const sql = sqlJson ? `SELECT * FROM ${tableName} WHERE ${sqlJson}` : `SELECT * FROM ${tableName}`pool.query(sql, (error, results) => {if (error) {reject({status: false,msg: error})logger.error(JSON.stringify(error))} else {resolve({status: true,data: results})}})})
}
/*** 导出* @param tableName: 表名* @param tableHeader:excel表头信息* @param sqlJson:需要拼接的SQL语句* @returns {Promise<unknown>}*/
const exportTableDataToExcel = (tableName, tableHeader, sqlJson) => {return new Promise((resolve, reject) => {find(tableName, sqlJson).then(({ status, msg, data }) => {if (status && data.length > 0) {// 定义excel表格的表头和内容const excelData = [tableHeader,...data.map(item => Object.values(item))]// 使用node-xlsx模块生成excel文件const buffer = xlsx.build([{ name: 'Sheet1', data: excelData }])resolve({status: true,data: buffer})} else {reject({status: false,msg: msg || '导出失败!'})}}).catch(err => {reject({status: false,msg: err || '导出失败!'})})})
}

node-xlsx需要的数据格式

const excelData = [['日志主键', '模块标题',...],[1, 'test1',...],[2, 'test2',...]
]

编写导出excel接口

exportFile(req, res) {const tableHeader = ['日志主键', '模块标题', '业务类型', '方法名称', '请求方式', '操作类别', '操作人员', '部门名称', '请求URL', '主机地址', '操作地点', '请求参数', '返回参数', '操作状态', '错误消息', '操作时间']exportTableDataToExcel('sys_oper_log', tableHeader, null).then(({ status, msg, data }) => {if (status && data) {// 设置返回的http header信息,告诉浏览器该文件是一个excel文件res.setHeader('Content-Type', 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;charset=utf-8')res.setHeader('Content-Disposition', 'attachment; filename=' + encodeURIComponent('导出数据.xlsx'))// 将生成的excel文件发送给客户端res.send(data)} else {res.sendError(msg || '导出操作日志失败!')}}).catch(err => {res.sendError(err || '导出操作日志失败!')})}

编写swagger注释

/*** @swagger* /operlog/export:*   post:*     tags:*       - 操作日志-导出操作日志*     summary: 导出操作日志*     produces:*       - application/json*     responses:*       200:*         description: 成功*       400:*         description: 失败*     security:*       - Authorization:*/
router.post('/export', exportFile)

apifox调用接口

在这里插入图片描述

swagger-ui调用接口

在这里插入图片描述

下载文件效果

在这里插入图片描述

参考链接

参考链接1
参考链接2

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/229888.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Linux——权限

个人主页&#xff1a;日刷百题 系列专栏&#xff1a;〖C语言小游戏〗〖Linux〗〖数据结构〗 〖C语言〗 &#x1f30e;欢迎各位→点赞&#x1f44d;收藏⭐️留言&#x1f4dd; ​ ​ 一、 Linux下用户的分类 Linux下有两种用户&#xff1a; 1. root&#xff08;超级管理员用户…

【Docker】离线一键式安装docker、docker-compose

1.创建根目录(可随意) mkdir -p /docker2.上传文件 资源地址 [rootlocalhost docker]# tree /docker/ /docker/ ├── docker │ ├── docker-18.03.1-ce.tgz │ └── docker-compose-Linux-x86_64 ├── install-docker-compose.sh └── install-docker.sh3.安装…

基于FPGA的HDMI编码模块设计(包含工程源文件)

前文已经通过FPGA实现了TMDS视频编码的算法&#xff0c;也对单沿数据采样转双沿数据采样的ODDR原语做了详细讲解和仿真验证&#xff0c;本文将这些模块结合&#xff0c;设计出HDMI编码模块&#xff0c;在HDMI接口的显示器上显示一张图片。 1、整体思路 如图1所示&#xff0c;是…

Github 2023-12-18 开源项目周报 Top14

根据Github Trendings的统计&#xff0c;本周(2023-12-18统计)共有14个项目上榜。根据开发语言中项目的数量&#xff0c;汇总情况如下&#xff1a; 开发语言项目数量TypeScript项目4Python项目4Jupyter Notebook项目3非开发语言项目1JavaScript项目1Rust项目1Go项目1 基于项目…

【5G PHY】5G小区类型、小区组和小区节点的概念介绍

博主未授权任何人或组织机构转载博主任何原创文章&#xff0c;感谢各位对原创的支持&#xff01; 博主链接 本人就职于国际知名终端厂商&#xff0c;负责modem芯片研发。 在5G早期负责终端数据业务层、核心网相关的开发工作&#xff0c;目前牵头6G算力网络技术标准研究。 博客…

剑指 Offer(第2版)面试题 37:序列化二叉树

剑指 Offer&#xff08;第2版&#xff09;面试题 37&#xff1a;序列化二叉树 剑指 Offer&#xff08;第2版&#xff09;面试题 37&#xff1a;序列化二叉树解法1&#xff1a;深度优先搜索 剑指 Offer&#xff08;第2版&#xff09;面试题 37&#xff1a;序列化二叉树 题目来源…

运算常见问题

运算常见问题 浮点数常见问题 1.double类型计算问题 首先我们看一下double类型的数据&#xff0c;计算会出现什么问题&#xff1f; public static void main(String[] args) {double amount1 0.1;double amount2 1.2;System.out.println(amount2 - amount1);} 上边程序的…

前后端传参中遇见的问题

前后端传参经常容易出错&#xff0c;本文记录开发springBootMybatis-plusvuecli项目中出现的传参问题及解决办法 1.前后端没有跨域配置&#xff0c;报错 解决方法&#xff1a;后端进行跨域配置&#xff0c;拷贝CorsConfig类 package com.example.xxxx.config;import org.spr…

MATLAB算法实战应用案例精讲-【目标检测】机器视觉-工业相机(补充篇)

目录 知识储备 光学系统设计全过程 算法原理 工业相机基本参数以及选型 工业相机基本参数:

web服务器之——基于虚拟目录和用户控制的web网站

目录 一、虚拟目录 虚拟目录的作用&#xff1a; 二、搭建基于虚拟目录的web网站 1、www服务器配置 2、搭建静态网站 设置防火墙状态 关闭文件访问权限——SeLinux 3、编辑网页资源文件 4、设置虚拟目录 5、向虚拟目录中写入资源 6、重启httpd 三、搭建基…

Flink系列之:监控反压

Flink系列之&#xff1a;监控反压 一、反压二、Task 性能指标三、示例四、反压状态 Flink Web 界面提供了一个选项卡来监控正在运行 jobs 的反压行为。 一、反压 如果你看到一个 task 发生 反压警告&#xff08;例如&#xff1a; High&#xff09;&#xff0c;意味着它生产数…

什么是缓存击穿、缓存穿透、缓存雪崩?

&#x1f680; 作者主页&#xff1a; 有来技术 &#x1f525; 开源项目&#xff1a; youlai-mall &#x1f343; vue3-element-admin &#x1f343; youlai-boot &#x1f33a; 仓库主页&#xff1a; Gitee &#x1f4ab; Github &#x1f4ab; GitCode &#x1f496; 欢迎点赞…

ssh时怎么同时指定其端口号,以及scp文件到远程的指定端口

如果想要通过 SSH 连接到指定端口的远程服务器&#xff0c;可以在 SSH 命令中使用 -p 或 --port 参数来指定端口号。以下是相应的用法&#xff1a; $ ssh -p <port> userhost其中&#xff0c; 是要连接的端口号&#xff0c;user 是远程服务器上的用户名&#xff0c;host…

postman脚本生成可执行文件(6)

一.通过Python脚本&#xff08;executescript.py&#xff09;执行newman指令 #!usr/bin/python import subprocess from datetime import datetimeclass Newman_automate():Newman_automate():该类主要是定义postman脚本执行__path:cmd命令行中执行newnan脚本指令&#xff08;…

Spring Boot Profiles中文文档

本文为官方文档直译版本。原文链接 Spring Boot Profiles中文文档 引言添加活动配置文件配置文件组通过编程设置配置文件特定的配置文件 引言 Spring Profiles 提供了一种隔离应用程序配置的方法&#xff0c;使其仅在特定环境中可用。任何 Component、Configuration 或 Config…

TCP网络编程案例

InetAddress 类 相关方法: getLocalHost&#xff1a;获取本机InetAddress对象。 getByName&#xff1a;根据指定主机名/域名获取ip地址对象。 getHostName&#xff1a;获取InetAddress对象的主机名。 getHostAddress&#xff1a;获取InetAddress对象的地址。 简单使用&am…

【Vue+Mysql实现前端对接数据库】

文章目录 一、安装环境二、axios 封装和配置2.1 文件 src/utils/request.js 代码2.2 ENV 相关环境文件配置2.3 文件 src/api/login.js 代码三、Mysql 配置链接3.1 数据库配置文件 src/server/db.js 代码3.2 后端 node 服务配置文件 src/server/iondex.mjs 代码一、安装环境 Mys…

C语言—每日选择题—Day50

一天一天的更新&#xff0c;也是达到50天了&#xff0c;精选的题有250道&#xff0c;博主累计做了不下500道选择题&#xff0c;最喜欢的题型就是指针和数组之间的计算呀&#xff0c;不知道关注我的小伙伴是不是一直在坚持呢&#xff1f;文末有投票&#xff0c;大家可以投票让博…

[Big Bird]论文解读:Big Bird: Transformers for Longer Sequences

文章目录 1 介绍2 模型架构3 结果 论文&#xff1a;Big Bird: Transformers for Longer Sequences 作者&#xff1a;Manzil Zaheer, Guru Guruganesh, Avinava Dubey, Joshua Ainslie, Chris Alberti, Santiago Ontanon, Philip Pham, Anirudh Ravula, Qifan Wang, Li Yang, Am…

【数据结构】树状数组总结

知识概览 树状数组有两个作用&#xff1a; 快速求前缀和 时间复杂度O(log(n))修改某一个数 时间复杂度O(log(n)) 例题展示 1. 单点修改&#xff0c;区间查询 题目链接 活动 - AcWing本活动组织刷《算法竞赛进阶指南》&#xff0c;系统学习各种编程算法。主要面向…