node 做 中间层 导出下载接口传参

导出下载接口传参  是  需要qs 序列化的

qs是一个npm仓库所管理的包,可通过npm install qs命令进行安装. 
1. qs.parse()将URL解析成对象的形式

2. qs.stringify()将对象 序列化成URL的形式,以&进行拼接

qs.parse qs.stringify是用来处理url的,JSON.parse JSON.stringify是处理json的

项目中 为 

qs: ctx.request.query || {},
 
node 代码
routerModular.get('/alarmManagement/alarmManageExport', async (ctx, next) => {
    let url = SERVER_BASE_URI + '/alarm/export';
    let option = {
        url: url,  // 接口
        method: 'get',
        headers: {
            accessToken: ctx.headers.accesstoken || '',
            ssoId: ctx.headers.ssoid || ''
        },
        qs: ctx.request.query || {}, // 参数序列化
    };
    ctx.body = await request(option).on('response', function (response) {
        if (response.statusCode === 200) {
            if (response.headers['content-disposition']) {
                ctx.set('Content-disposition', response.headers['content-disposition'])
            }
            ctx.set('content-type', response.headers['content-type'])
        }
    })
});

 

react 项目中 的接口文件 导出接口 要加

responseType: 'blob',
export async function getExport(payload) {
  return await request({
    url: '/nodeapi//alarmExport',
    responseType: 'blob',
    method: 'get',
    params: payload,
  });
}

model文件

effects:(dispatch) => ({
    // 导出
    async getExport(payload) {
      let response = await service.getExport({ ...payload });
      return response;
    },
}),

 

调用接口 + 文件下载

 dispatchers.getExport(params).then((res) => {
      //  res文件流 使用 Blob 创建一个指向类型化数组
      let blob = new Blob([res], {
        type: `application/vnd.ms-excel;charset=utf-8`,
      });
      // 获取heads中的filename文件名
      let downloadElement = document.createElement('a');
      // 创建下载的链接
      let href = window.URL.createObjectURL(blob);
      downloadElement.href = href;
      // 下载后文件名
      downloadElement.download = `${name}_${moment().format(
        'YYYYMMDDHHmm'
      )}.xlsx`;
      document.body.appendChild(downloadElement);
      // 点击下载
      downloadElement.click();
      // 下载完成移除元素
      document.body.removeChild(downloadElement);
      // 释放掉blob对象
      window.URL.revokeObjectURL(href);
    });

 

posted @ 2021-10-28 15:18  cielw  阅读(126)  评论(0)    收藏  举报