【问题标题】:Creating a QR-code containing a link in NodejS在 NodejS 中创建包含链接的二维码
【发布时间】:2019-12-14 02:09:07
【问题描述】:

我现在正在做一个项目,我需要创建一个包含 NodeJS 中特定信息的二维码。我首先在 HTML 中创建画布,然后在 NodeJS 中使用它

<canvas id="canvas" width="300" height="300"></canvas>

然后在我的 NodeJS 文件中,我正在启动我的函数

const fs = require('fs');
const qrcode = require('qrcode');

module.exports = {
  generateQr: function(link){
    var canvas = new qrcode(document.getElementById('canvas'));

    qrcode.toCanvas(canvas, link, function (error) {
    if (error) console.error(error)
    console.log('success!');
    });
  }
};

不幸的是,我得到了错误:

ReferenceError: document is not defined

从上面的代码,它看起来正确吗? Qrcode 是否获取了我正在传递的数据,然后我应该怎么做才能使 QR 码出现在我的 HTML 中?

感谢您的帮助

【问题讨论】:

  • document 是浏览器特有的全局对象,不能在node中访问
  • 试试const result = await qrcode.toDataURL('&lt;your specific information&gt;') 应该会生成base-64的二维码图片

标签: html node.js qr-code


【解决方案1】:

document是浏览器特有的全局对象,不能在node中访问

node环境下,可以生成二维码图片并使用。

例子:

异步/等待风格:

const fs = require('fs');
const qrcode = require('qrcode');

module.exports = {
  generateQr: async link => {
    const qrCodeDataUrl = await qrcode.toDataURL(link);
    // ...
  }
};

承诺风格:

const fs = require('fs');
const qrcode = require('qrcode');

module.exports = {
  generateQr: link => {
    qrcode.toDataURL(link)
       .then(data => {
          const qrCodeDataUrl = data;
          // ...
       })
       .catch(err => {
          console.error(error);
          // ...
       });
  }
};

回调样式:

const fs = require('fs');
const qrcode = require('qrcode');

module.exports = {
  generateQr: link => {
    qrcode.toDataURL(link, function(err, data) {
       if (error) console.error(error);
       const qrCodeDataUrl = data;
       // ...
    });
  }
};

要在 HTML 文件中呈现它,您可以使用您选择的模板引擎:

ejs 为例:

const ejs = require('ejs');

// In some route
const qrCodeDataUrl = await generateQr('some link');
const html = ejs.render('<img src="<%= qrCodeDataUrl %>" />', {qrCodeDataUrl});

res.header('Content-Type', 'text/html');
res.send(html);
// ...

注意:这是一个简化的示例。请查看ejs 文档了解更多详情

【讨论】:

  • 好的,谢谢,它成功了,但我如何在我的 html 文件上打印出来?
  • 如果您需要在服务器端进行,您可以使用您选择的模板引擎(ejs、车把等)将其嵌入为图像(&lt;img src="..." /&gt;);
  • 我是将它添加到我的 nodejs 文件中还是在 html 中?或者我是否存储 qr 代码的值并通过“resp.render”将其发送到我的 html 文件?感谢您的回复
  • 很大程度上取决于你的应用逻辑
  • 如果您已经设置了 SSR,您可以将qrCodeDataUrl 嵌入到您的模板中,并使用res.render('...') 进行渲染并发送给客户端
猜你喜欢
  • 2012-03-09
  • 1970-01-01
  • 1970-01-01
  • 2021-10-12
  • 2017-04-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多