html - 在 NodejS 中创建包含链接的二维码

标签 html node.js qr-code

我现在正在做一个项目,我需要在 NodeJS 中创建一个包含特定信息的二维码。我首先在 HTML 中创建 Canvas ,然后在 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: 文档未定义

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

谢谢你的帮助

最佳答案

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

node环境下,您可以生成带有二维码的图像并使用它。

例子:

异步/等待风格:

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

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

promise 风格:

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);
// ...

Note: It's a simplified example. Please check ejs docs for more details

关于html - 在 NodejS 中创建包含链接的二维码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57377439/

相关文章:

php - 我如何修复 PHP 中的 cookie?

html - css font-family 在 Internet Explorer 上不起作用

javascript - 如何仅针对特定规则或一组规则运行 eslint - 仅限命令行

javascript - 在 python 服务器上从 Fabric.js JSON 构造图像

angularjs - 仅在单击 SideMenu 后才会显示 Ionic 内容

javascript - 如何在滚动页面时逐渐调整图像大小?

java - 使用数字签名来保护二维码

qr-code - 将 BMP 图像存储在 QR 码中

Laravel QR 阅读器不使用 .vue 文件

javascript - 提交输入值后清除输入