大前端刷级之路Node.js专题

从excel转为csv下载

2017-09-11  本文已影响15人  天驱丶

管理后台通常涉及excel下载,由于公司最近重构项目变为三个小项目,数据库也分为了3个,这给管理后台增加了下载压力;在用户列表中,数据库操作涉及联表查询和跨库查询,几千条数据容易造成数据处理过长返回504;于是今天就开始了优化,优化预计分三步走:
一、将excel转为csv下载,因为csv从格式上说就是一组组append的数据,不需要在格式转换上浪费运算量;
二、优化联表查询,可以通过添加索引来优化;
三、由于运算时间太长,所以可以打算使用email发送结果。

const stringify = require('csv-stringify')
const Promise = require('bluebird')
const _ = require('lodash')
const iconv = require('iconv-lite')

class ExcelUtil {
  static async genCsv (array, columns, request) {
    if (_.isEmpty(array) || _.isEmpty(columns)) throw new AppError('参数错误')
    return await new Promise(function (resolve, reject) {
      stringify(array, { header: true, columns: columns, delimiter: ',' }, function (err, data) {
        if (err) {
          return reject(err)
        }
        const userAgent = request && request.header && request.header['user-agent']
        if (userAgent && userAgent.match(/windows/i)) {
          data = iconv.encode(data, 'gbk')
        }
        resolve(data)
      })
    })
  }
}

module.exports = ExcelUtil

其中遇到了一个坑,linux打开显示正常,windows显示乱码,我就猜测是编码的问题,问了同事他说之前也遇到过,windows使用gbk字符集,可以通过request的user-agent判断是否windows系统

上一篇下一篇

猜你喜欢

热点阅读