最近用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('圖片下載地址') }
具體接口代碼(查看)小程序