koa异步写文件遇到的小问题

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

具体接口代码(查看小程序

相关文章
相关标签/搜索