云端变量QR更新时自动调用QRCode.toDataURL函数的实现问题
解决QR更新时重新生成二维码的问题
你的核心问题是把路由注册逻辑放在了qr事件回调里,导致每次QR更新都重复注册路由,且路由里的QR值不会自动同步最新数据。按下面的方式修改:
- 把最新的QR值存在一个全局变量里,让路由可以随时读取
- 只注册一次
/路径的路由,不要放在事件回调内 - 在
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
相关产品推荐
相关产品推荐

