最近用koa寫個微信小程序二維碼生成接口,出現了一個小坑:由於小程序二維碼生成接口返回的是二進制流,需要通過fs操作生成圖片返回給前端下載。期間反覆出現下載文件大小爲0(零 / 大小未知)的情況。
主要生成二維碼代碼如下
// 其餘代碼省略
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
結束後生成二維碼接口才返回數據。
前端在接收到生成二維碼接口返回數據後才調用下載二維碼接口。
koa端等待寫文件結束後返回,這裏koa要用promise在callback後觸發返回數據:
ctx.body = await new Promise((resolve, reject) => {
writeS.on('finish', function () {
resolve({
code: 1
})
})
})
前端監聽操作:
if (res.data.code === 1) {
window.open('圖片下載地址')
}
具體接口代碼(查看)