在 Node.js 中生成二维码:qrcode 库及示例

面向初学者的在线Python训练器

轻松学习Python,无需理论负担。在浏览器中直接解决带自动检查的实践任务,无需安装任何东西。

开始课程

使用 qrcode 库在 Node.js 上生成二维码



二维码已成为现代网络不可或缺的一部分:从 Wi-Fi 链接到支付确认。如果您正在开发 Node.js 后端并希望以编程方式创建二维码,qrcode 库是最流行且最简单的工具。它无需安装额外的图形包,并且能够以多种格式输出结果:PNG、SVG、HTML Canvas,甚至终端文本视图。



安装

通过 npm 安装该包:

npm install qrcode


安装后,将模块引入您的项目:

const QRCode = require('qrcode');


主要方法

该库提供了三种主要的生成方法:

  • QRCode.toDataURL(text, options) — 返回 Data URL(包含 PNG 图像的 base64 字符串)。
  • QRCode.toBuffer(text, options) — 返回包含 PNG 图像的 Buffer(便于保存到文件或通过 HTTP 发送)。
  • QRCode.toString(text, options) — 返回 SVG 或终端字符形式的字符串(输出类型在 options.type 中设置)。
  • QRCode.toCanvas(canvasElement, text, options) — 用于浏览器环境(canvas)。


简单示例:创建 PNG(缓冲区)二维码

最常见的场景是生成图像并保存到文件或提供给用户。操作方法如下:

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

QRCode.toBuffer('https://pythonlib.ru', { width: 400, margin: 2, color: { dark: '#000000', light: '#ffffff' }}).then(buffer => { fs.writeFileSync('qrcode.png', buffer); console.log('二维码已保存到 qrcode.png');}).catch(err => console.error(err));


在此示例中,我们设置了 400 像素的尺寸、2 个模块的边距以及黑白配色方案。toBuffer 方法返回一个 Promise,因此我们使用 .then() 或 async/await。



生成 SVG 格式的二维码

对于 Web 应用程序,使用矢量格式 SVG 通常更方便——它可无损缩放且占用空间更小。在选项中指定 type: 'svg':

const QRCode = require('qrcode');

QRCode.toString('https://pythonlib.ru', { type: 'svg', width: 300, color: { dark: '#1a73e8', light: '#ffffff' }}).then(svgString => { console.log(svgString); // 现在您可以将 svgString 保存到文件或插入到 HTML 中}).catch(err => console.error(err));


直接在终端输出二维码

有时需要快速检查链接而无需打开浏览器。该库可以使用 Unicode 字符在控制台中绘制二维码:

const QRCode = require('qrcode');

QRCode.toString('Hello, PythonLib!', { type: 'terminal', small: true}).then(qr => { console.log(qr);}).catch(err => console.error(err));


参数 small: true 使二维码更紧凑(使用半块字符)。如果去掉它,图像会更大但更详细。



设置和参数

options 对象允许灵活控制生成过程。主要字段:

  • width — 图像宽度(像素,默认 256)。
  • margin — 边缘边距(以二维码模块为单位,默认 4)。
  • color.dark — 深色模块的颜色(hex、rgb 或颜色名称)。
  • color.light — 背景颜色(默认白色)。
  • errorCorrectionLevel — 纠错级别:'L'(7%)、'M'(15%)、'Q'(25%)、'H'(30%)。级别越高,可恢复的数据越多,但二维码本身也会变得更密集。

推荐