You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

云端变量QR更新时自动调用QRCode.toDataURL函数的实现问题

解决QR更新时重新生成二维码的问题

你的核心问题是把路由注册逻辑放在了qr事件回调里,导致每次QR更新都重复注册路由,且路由里的QR值不会自动同步最新数据。按下面的方式修改:

  1. 把最新的QR值存在一个全局变量里,让路由可以随时读取
  2. 只注册一次/路径的路由,不要放在事件回调内
  3. 在qr事件触发时更新这个全局变量,保留原有终端打印和二维码生成逻辑

修改后的代码:

// 声明全局变量存储最新的QR值
let latestQr = '';

client.on('qr', qr => {
  qrcode.generate(qr, {small: true});
  latestQr = qr; // 更新最新的QR值
  console.log(qr);
});

// 只注册一次路由
app.get('/', function (req, res) {
  // 如果还没收到QR值,返回提示
  if (!latestQr) {
    return res.send('暂未获取到二维码数据');
  }
  
  const opts = {
    errorCorrectionLevel: 'H',
    type: 'image/jpeg',
    quality: 0.3,
    margin: 1,
    color: {
      dark:"#010599FF",
      light:"#40FF60"
    }
  };
  
  QRCode.toDataURL(latestQr, opts, function (err, url) {
    if (err) {
      console.error(err);
      return res.status(500).send('生成二维码失败');
    }
    res.send(`<img src='${url}'>`);
  });
});

逻辑说明

  • 每次云端推送新的QR,client.on('qr')会更新latestQr变量
  • 用户访问/时,路由会读取当前最新的latestQr来生成二维码,保证每次请求都用最新的QR数据
  • 增加了无QR值时的错误处理,避免报错

内容的提问来源于stack exchange,提问作者yossi lerer

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.14 17:45:42