Generación de códigos QR en Node.js con la biblioteca qrcode
Los códigos QR se han convertido en una parte esencial de la web moderna: desde enlaces a Wi-Fi hasta confirmación de pagos. Si estás desarrollando un backend en Node.js y deseas crear códigos QR mediante programación, la biblioteca qrcode es la herramienta más popular y sencilla. No requiere instalar paquetes gráficos adicionales y puede generar resultados en diferentes formatos: PNG, SVG, lienzo HTML e incluso en formato de texto para la terminal.
Instalación
Instala el paquete a través de npm:
npm install qrcodeDespués de la instalación, importa el módulo en tu proyecto:
const QRCode = require('qrcode');Métodos principales
La biblioteca proporciona tres métodos principales para la generación:
QRCode.toDataURL(text, options)— devuelve una URL de datos (cadena base64 con una imagen PNG).QRCode.toBuffer(text, options)— devuelve un Buffer con una imagen PNG (útil para guardar en un archivo o enviar a través de HTTP).QRCode.toString(text, options)— devuelve una cadena en formato SVG o caracteres de terminal (el tipo de salida se define enoptions.type).QRCode.toCanvas(canvasElement, text, options)— para entornos de navegador (canvas).
Ejemplo simple: creación de un código QR en PNG (buffer)
El escenario más común es generar una imagen y guardarla en un archivo o entregarla al usuario. Así es como se hace:
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('Código QR guardado en qrcode.png');}).catch(err => console.error(err));En este ejemplo, establecemos un tamaño de 400 píxeles, un margen de 2 módulos y un esquema de color blanco y negro. El método toBuffer devuelve una Promise, por lo que usamos .then() o async/await.
Generación de código QR en SVG
Para aplicaciones web, a menudo es más conveniente usar el formato vectorial SVG: se escala sin pérdida de calidad y ocupa menos espacio. Especifica type: 'svg' en las opciones:
const QRCode = require('qrcode');
QRCode.toString('https://pythonlib.ru', { type: 'svg', width: 300, color: { dark: '#1a73e8', light: '#ffffff' }}).then(svgString => { console.log(svgString); // Ahora puedes guardar svgString en un archivo o insertarlo en HTML}).catch(err => console.error(err));Mostrar el código QR directamente en la terminal
A veces es necesario verificar rápidamente un enlace sin abrir el navegador. La biblioteca puede dibujar un código QR con caracteres Unicode en la consola:
const QRCode = require('qrcode');
QRCode.toString('¡Hola, PythonLib!', { type: 'terminal', small: true}).then(qr => { console.log(qr);}).catch(err => console.error(err));El parámetro small: true hace que el código QR sea más compacto (usa medios bloques). Si se elimina, la imagen será más grande pero más detallada.
Configuraciones y parámetros
El objeto options permite controlar la generación de forma flexible. Los campos principales son:
width— ancho de la imagen en píxeles (por defecto 256).margin— margen desde el borde (en módulos del código QR, por defecto 4).color.dark— color de los módulos oscuros (hex, rgb o nombre del color).color.light— color de fondo (por defecto blanco).errorCorrectionLevel— nivel de corrección de errores:'L'(7%),'M'(15%),'Q'(25%),'H'(30%). Cuanto mayor es el nivel, más datos se pueden recuperar, pero el código QR se vuelve más denso.
También en la biblioteca
Monitoreo de aplicaciones PHP: guía completa de herramientas y bibliotecas
Criptografía en Go (Golang): cifrado y hashing
Trabajo con imágenes en TypeScript: bibliotecas, herramientas y ejemplos de código