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

具体接口代码(查看

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值