最近用koa写了一个微信小程序二维码生成接口,有个小坑:由于小程序二维码生成接口返回的是二进制流,所以需要操作通过fs生成的图片返回给前端下载。期间,下载的文件大小反复为0(零/未知大小)。主要生成二维码代码如下//其他代码省略constwriteS=fs.createWriteStream('qrcode.png')awaitrequest({uri:`https://api.weixin.qq.com/wxa/getwxacode?access_token=${token}`,method:'post',body:data,json:true}).pipe(writeS)//其余代码省略需要有顺序问题,必须等到文件写在进行图片下载接口传输之前。处理方式是在前端调用生成二维码的接口,该接口的运行需要一个等待过程,即在createWriteStream结束后生成二维码接口,然后返回数据。前端收到二维码生成接口返回的数据后,调用下载二维码接口。koa端等待文件写入后返回。这里koa需要使用promise触发回调后的返回数据:ctx.body=awaitnewPromise((resolve,reject)=>{writeS.on('finish',function(){resolve({code:1})})})前端监控操作:if(res.data.code===1){window.open('图片下载地址')}具体接口代码(查看)
