最近用koa写个微信小程序二维码生成接口,出现了一个小坑:因为小程序二维码生成接口返回的是二进制流,须要经过fs操做生成图片返回给前端下载。期间反复出现下载文件大小为0(零 / 大小未知)的状况。 javascript
主要生成二维码代码以下前端
// 其他代码省略 const writeS = fs.createWriteStream('qrcode.png') await request({ uri: `https://api.weixin.qq.com/wxa/getwxacode?access_token=${token}`, method: 'post', body: data, json: true }).pipe(writeS) // 其他代码省略
须要有个前后顺序问题,必须先等到文件写完后才能进行图片下载接口调用。处理方法是在前端调用生成二维码的接口,而接口的操做须要有个等待过程,即要在createWriteStream
结束后生成二维码接口才返回数据。 java
前端在接收到生成二维码接口返回数据后才调用下载二维码接口。 git
koa端等待写文件结束后返回,这里koa要用promise在callback后触发返回数据:github
ctx.body = await new Promise((resolve, reject) => { writeS.on('finish', function () { resolve({ code: 1 }) }) })
前端监听操做:json
if (res.data.code === 1) { window.open('图片下载地址') }
具体接口代码(查看)小程序