koa異步寫文件遇到的小問題

koa
最近用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('圖片下載地址')
}

具體接口代碼(查看

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章