class DownloadCTl {
async outputeExcel(ctx){
//引入模块
const {User} = require('../models/users')
const userlist = await User.find()
const nodeExcel= require('excel-export')
const {fields = ""} = ctx.query;
const OutputFields = fields.split(';')
//构建导出结构
let conf = {};
conf.cols = [];
const cols = ['名字','部门','性别','id','编码'];
for(let item of cols){
let tits = {};
tits.caption = item;
tits.type = 'string';
conf.cols.push(tits);
}
const alldata = [];
const tows = ['username','department','station','_id','gender'];
for(let i in userlist){
let row = [];
for(let j of tows){
let o = {};
o[i] = userlist[i][j];
row.push(o[i])
}
alldata.push(row)
}
conf.rows = alldata
//将所有数据写入nodeExcel中
var result = nodeExcel.execute(conf);
//设置响应头
//设置下载文件命名 支持的excel文件类有.xlsx .xls .xlsm .xltx .xltm .xlsb .xlam等
ctx.set('Content-Type', 'application/vnd.openxmlformats');
ctx.set("Content-Disposition", "attachment; filename=" + "Report.xlsx");
let data = new Buffer.from(result,'binary');
//Buffer.alloc(), Buffer.allocUnsafe(), or Buffer.from()
ctx.body = data
}
}
module.exports = new DownloadCTl()
这个是注册路由的部分
const router = require('koa-router')()
const {outputeExcel} = require('../controllers/downloads')
router.prefix('/exportexcel')
router.get('/',outputeExcel);
module.exports = router
不知道为什么引用excel-expoprt这个模块那么麻烦,我放在类之外或者方法外面都是导致连接不上mongodb, const nodeExcel= require('excel-export')
然后最主要的问题是上面的可以正常运行第一次
格式和内容都是正确无误的
然后再一次申请就提示无法连接到mongodb了
导出的文件也变成了json,并且是不含信息的,也是提示连接不上mongodb
问的同学好像说是生命周期结束了也没太明白
有没网友有遇到过类似的问题