Saltar al pie de página
AYUDA DE NODE

hapi node js (Cómo funciona para desarrolladores)

Generar documentos PDF dinámicos es un requisito típico para muchas aplicaciones en el panorama actual del desarrollo web. La capacidad de generar y trabajar con PDFs en el lado del servidor es esencial para producir informes, facturación y guías de usuario. Este artículo discutirá la integración de IronPDF, un estable paquete de creación de PDF, con Hapi.js, un potente framework de Node.js. También investigaremos métodos viables para asegurar una conexión fluida entre Node.js, servidor Hapi, y .NET ya que IronPDF es una biblioteca .NET.

Entendiendo Hapi.js

Un framework de código abierto llamado el plugin del servidor Hapi se puede usar para crear aplicaciones web en línea escalables y confiables de Node.js, APIs núcleo, y servicios. Hapi.js, desarrollado por Walmart Labs, es conocido por su robusto sistema de plugins, vibrante ecosistema de frameworks y plugins extensibles, y una multitud de posibilidades configurables. Es una gran opción para crear aplicaciones web contemporáneas ya que hace más sencillo el establecimiento de servidores, el procesamiento de solicitudes, el uso de bases de datos y el ruteo.

hapi node js (Cómo Funciona Para Desarrolladores): Figura 1 - Hapi.js

Sistema de plugins y rico ecosistema

Una comunidad robusta de plugins para Hapi.js expande su funcionalidad básica. Debido a su modularidad, el framework fundamental no se vuelve inflado cuando los desarrolladores de Hapi agregan lógica de negocio para características como validación de entrada, autenticación y almacenamiento en caché. El sistema de plugins fomenta una programación que es manejable y reusable.

Enrutamiento

Un sistema de ruteo robusto y adaptable es ofrecido por Hapi.js. Proporciona opciones de configuración específicas para rutas, como validación, autenticación y formateo de respuestas, y soporta varios protocolos HTTP. La lógica de ruteo compleja se puede crear fácilmente gracias a esta versatilidad.

Metodología basada en la configuración

Con su metodología impulsada por configuración, Hapi.js permite a los desarrolladores especificar el comportamiento del servidor a través de objetos de configuración. Debido a que los cambios en el comportamiento del servidor pueden implementarse frecuentemente sin cambiar el código de la aplicación o la lógica de negocio, esto resulta en menos código, un código más limpio y una base de código más fácil de mantener.

Validación de entradas y análisis de cargas

Joi es un lenguaje de descripción de esquema de base de datos y validador de datos efectivo que interactúa con Hapi.js fácilmente. La validación de entrada fuerte es posible gracias a esta integración, garantizando que los datos de la solicitud cumplan con los estándares preestablecidos antes de ser procesados. El análisis de carga útil para diversos tipos de datos, como JSON y datos de formularios, también es soportado por Hapi.js.

Autenticación y autorización integradas

Con el plugin hapi-auth, Hapi.js ofrece un mecanismo completo de autenticación y autorización para aplicaciones web escalables. Varias técnicas de autenticación, como Básica, JWT, OAuth y esquemas personalizados, son soportadas por este sistema de autorización integrado. El acceso seguro a recursos y un marco seguro con mínimo gasto se garantiza con la capacidad de gestionar la autorización a nivel de ruta. Hapi.js ha sido diseñado para funcionar en entornos empresariales complejos. Hapi nos permite construir varias aplicaciones como sitios web, servidores, aplicaciones proxy HTTP, etc.

Manejo de errores

Hapi.js proporciona una funcionalidad rica en manejo de errores. Los desarrolladores pueden definir manejadores de errores personalizados para manejar problemas ya sea globalmente o en el nivel de ruta de proyectos individuales. Esto garantiza que los problemas sean manejados de manera consistente y que los clientes reciban respuestas de error perspicaces.

Registro y depuración

Fuertes instalaciones de registro y depuración están incluidas en el ecosistema Hapi que ayudan a resolver errores. Puede configurarse para registrar y logar muchos tipos de eventos, como actividad de servidor, fallos y eventos del ciclo de vida de solicitudes. Este registro es muy útil para la solución de problemas y seguimiento del rendimiento de aplicaciones.

Extensibilidad

El diseño de Hapi.js es increíblemente extensible, por ejemplo, los desarrolladores pueden crear plugins personalizados para cambiar o agregar al comportamiento existente. Debido a su extensibilidad, Hapi.js puede adaptarse para satisfacer las únicas necesidades de cualquier proyecto.

Seguridad

Al ofrecer soporte integrado para procedimientos de seguridad ampliamente utilizados, aplicaciones escalables y frameworks, incluyendo validación de entrada, políticas de seguridad de contenido, y configuración de encabezados HTTP, Hapi.js da alta prioridad a la seguridad. Los desarrolladores pueden crear aplicaciones y frameworks resistentes a vulnerabilidades típicas poniendo un fuerte énfasis en la seguridad.

Crear y configurar Hapi Node.js

Establecer y configurar un servidor Hapi.js requiere múltiples pasos. Aquí hay una guía comprensiva para ayudarle a instalar plugins, crear rutas y configurar un servidor básico Hapi.js. Será guiado a través del proceso de creación de rutas, configuración de servidores, establecimiento de configuraciones iniciales y uso de plugins.

Instalar Hapi.js

Instale Hapi.js y cualquier otra dependencia necesaria:

npm install @hapi/hapi
npm install @hapi/hapi
SHELL

Crear el servidor

Para crear un servidor básico Hapi.js, cree un archivo llamado server.js y agregue el siguiente código a él:

const Hapi = require('@hapi/hapi');

// Initialize the server
const init = async () => {
    const server = Hapi.server({
        port: 3000,
        host: 'localhost'
    });

    // Define a simple GET route
    server.route({
        method: 'GET',
        path: '/',
        handler: (request, h) => {
            return 'Hello world!';
        }
    });

    // Start the server
    await server.start();
    console.log('Server running on %s', server.info.uri);
};

// Handle unhandled rejections
process.on('unhandledRejection', (err) => {
    console.log(err);
    process.exit(1);
});

// Call the initialization function
init();
const Hapi = require('@hapi/hapi');

// Initialize the server
const init = async () => {
    const server = Hapi.server({
        port: 3000,
        host: 'localhost'
    });

    // Define a simple GET route
    server.route({
        method: 'GET',
        path: '/',
        handler: (request, h) => {
            return 'Hello world!';
        }
    });

    // Start the server
    await server.start();
    console.log('Server running on %s', server.info.uri);
};

// Handle unhandled rejections
process.on('unhandledRejection', (err) => {
    console.log(err);
    process.exit(1);
});

// Call the initialization function
init();
JAVASCRIPT

Añadir configuración de ruta

Opciones de configuración más sofisticadas para rutas Hapi.js incluyen parámetros, parámetros de consulta, validación de carga útil, almacenamiento en caché, y plugins adaptados para implementar la ruta particular.

Ruta con parámetros

const Hapi = require('@hapi/hapi');

// Initialize the server
const init = async () => {
    const server = Hapi.server({
        port: 3000,
        host: 'localhost'
    });

    // Define a GET route with path parameter
    server.route({
        method: 'GET',
        path: '/user/{id}',
        handler: (request, h) => {
            const userId = request.params.id;
            return `User ID: ${userId}`;
        }
    });

    // Start the server
    await server.start();
    console.log('Server running on %s', server.info.uri);
};

// Handle unhandled rejections
process.on('unhandledRejection', (err) => {
    console.log(err);
    process.exit(1);
});

// Call the initialization function
init();
const Hapi = require('@hapi/hapi');

// Initialize the server
const init = async () => {
    const server = Hapi.server({
        port: 3000,
        host: 'localhost'
    });

    // Define a GET route with path parameter
    server.route({
        method: 'GET',
        path: '/user/{id}',
        handler: (request, h) => {
            const userId = request.params.id;
            return `User ID: ${userId}`;
        }
    });

    // Start the server
    await server.start();
    console.log('Server running on %s', server.info.uri);
};

// Handle unhandled rejections
process.on('unhandledRejection', (err) => {
    console.log(err);
    process.exit(1);
});

// Call the initialization function
init();
JAVASCRIPT

Ruta con parámetros de consulta

Además, manejar parámetros de consulta es sencillo usando Hapi.js. Así es como se hace:

const Hapi = require('@hapi/hapi');

// Initialize the server
const init = async () => {
    const server = Hapi.server({
        port: 3000,
        host: 'localhost'
    });

    // Define a GET route with query parameter
    server.route({
        method: 'GET',
        path: '/search',
        handler: (request, h) => {
            const query = request.query.q;
            return `Search query: ${query}`;
        }
    });

    // Start the server
    await server.start();
    console.log('Server running on %s', server.info.uri);
};

// Handle unhandled rejections
process.on('unhandledRejection', (err) => {
    console.log(err);
    process.exit(1);
});

// Call the initialization function
init();
const Hapi = require('@hapi/hapi');

// Initialize the server
const init = async () => {
    const server = Hapi.server({
        port: 3000,
        host: 'localhost'
    });

    // Define a GET route with query parameter
    server.route({
        method: 'GET',
        path: '/search',
        handler: (request, h) => {
            const query = request.query.q;
            return `Search query: ${query}`;
        }
    });

    // Start the server
    await server.start();
    console.log('Server running on %s', server.info.uri);
};

// Handle unhandled rejections
process.on('unhandledRejection', (err) => {
    console.log(err);
    process.exit(1);
});

// Call the initialization function
init();
JAVASCRIPT

Una solicitud GET a /search?q=Hapi responderá con "Consulta de búsqueda: Hapi".

hapi node js (Cómo Funciona Para Desarrolladores): Figura 2 - Ruteo usando Parámetros de Consulta Output

Ejecutar el servidor

Ejecute el siguiente comando para iniciar su servidor:

node server.js
node server.js
SHELL

En su terminal, debería ver el mensaje Servidor operando en http://localhost:3000. "¡Hola, Hapi!" aparecerá en su navegador cuando visite http://localhost:3000.

Empezando

¡IronPDF para Node.js es bastante fácil de comenzar! Aquí se desglosan los pasos involucrados.

¿Qué es IronPDF?

IronPDF es una biblioteca de aplicación diseñada para facilitar la creación, edición y gestión de PDFs. Esta herramienta permite a los desarrolladores extraer texto e imágenes de documentos HTML, combinar múltiples documentos PDF, aplicar encabezados y marcas de agua, y más. Los desarrolladores pueden crear fácilmente documentos PDF de alta calidad de manera programática con la API amigable para el usuario de IronPDF y su extensa documentación, lo que simplifica trabajar con PDFs. IronPDF tiene todas las características y capacidades necesarias para mejorar los flujos de trabajo de documentos y ofrecer excelentes experiencias de usuario en una variedad de entornos, ya sea para producir facturas, informes o documentación.

hapi node js (Cómo Funciona Para Desarrolladores): Figura 3 - IronPDF

Características de IronPDF

Convertir HTML a PDF: Puede convertir rápida y fácilmente contenido HTML o archivos estáticos—incluyendo CSS y JavaScript—a archivos PDF.

Fusión de PDF: Para facilitar las tareas de gestión de documentos, combine varios documentos PDF en un único archivo PDF.

Extracción de Texto e Imagen: Saque el texto e imágenes de los archivos PDF para que pueda procesarlos o analizarlos más tarde.

Marcado de Agua: Por razones de seguridad o de marca, agregue marcas de agua de texto o imagen a las páginas PDF.

Agregar Encabezado y Pie de Página: En los documentos PDF, agregue encabezados y pies de página con texto personalizado o números de página.

Instalar IronPDF

Para habilitar la capacidad de IronPDF, instale los paquetes necesarios de Node.js usando el gestor de paquetes de node.

npm install @ironsoftware/ironpdf
npm install @ironsoftware/ironpdf
SHELL

Integra Hapi.js con IronPDF

Primero, configure un servidor Hapi.js simple para responder a solicitudes entrantes en la web. Este servidor está listo para recibir solicitudes para producir archivos PDF.

const Hapi = require('@hapi/hapi');
const IronPdf = require("@ironsoftware/ironpdf");

// Configure the IronPDF setup
const document = IronPdf.PdfDocument;
var config = IronPdf.IronPdfGlobalConfig;
config.setConfig({licenseKey: ''});

// Initialize the server
const init = async () => {
    const server = Hapi.server({
        port: 3000,
        host: 'localhost'
    });

    // Define a route for PDF generation
    server.route({
        method: 'GET',
        path: '/',
        handler: async (request, h) => {
            // Generate PDF here
            console.log('Connected');
            await generatePdf();
            return h.file('demo.pdf');
        }
    });

    // Start the server
    await server.start();
    console.log('Server running on %s', server.info.uri);
};

// Handle unhandled rejections
process.on('unhandledRejection', (err) => {
    console.log(err);
    process.exit(1);
});

// Function to generate PDF from HTML using IronPDF
const generatePdf = async () => {
    const htmlContent = '<html><body><h1>Hello, IronPDF!</h1></body></html>';
    (await document.fromHtml(htmlContent)).saveAs('demo.pdf');
};

// Call the initialization function
init();
const Hapi = require('@hapi/hapi');
const IronPdf = require("@ironsoftware/ironpdf");

// Configure the IronPDF setup
const document = IronPdf.PdfDocument;
var config = IronPdf.IronPdfGlobalConfig;
config.setConfig({licenseKey: ''});

// Initialize the server
const init = async () => {
    const server = Hapi.server({
        port: 3000,
        host: 'localhost'
    });

    // Define a route for PDF generation
    server.route({
        method: 'GET',
        path: '/',
        handler: async (request, h) => {
            // Generate PDF here
            console.log('Connected');
            await generatePdf();
            return h.file('demo.pdf');
        }
    });

    // Start the server
    await server.start();
    console.log('Server running on %s', server.info.uri);
};

// Handle unhandled rejections
process.on('unhandledRejection', (err) => {
    console.log(err);
    process.exit(1);
});

// Function to generate PDF from HTML using IronPDF
const generatePdf = async () => {
    const htmlContent = '<html><body><h1>Hello, IronPDF!</h1></body></html>';
    (await document.fromHtml(htmlContent)).saveAs('demo.pdf');
};

// Call the initialization function
init();
JAVASCRIPT

Configuramos un servidor para escuchar las llamadas HTTP en el puerto 3000 e importamos Hapi.js. Para manejar solicitudes HTTP GET a la ruta raíz /, se define una ruta. Para crear el contendido del PDF usando IronPDF, llamamos a la función generatePdf en el manejador de la ruta. Para renderizar el material HTML como un buffer de PDF de manera asincrónica, importe IronPDF. Después de la generación, el contenido del PDF se devuelve como una respuesta con el tipo de contenido correspondiente (application/pdf). Además, configuramos el encabezado Content-Disposition para especificar si el PDF debe descargarse como adjunto o mostrarse en el navegador (opcional).

hapi node js (Cómo Funciona Para Desarrolladores): Figura 4 - Output de PDF

Conclusión

En resumen, usar Hapi.js e IronPDF dentro de una aplicación de Node.js ofrece una manera robusta de crear documentos PDF al vuelo. Puede configurar rápidamente un servidor Hapi.js para procesar solicitudes HTTP y usar IronPDF para crear PDFs a partir de contenido HTML o realizar otras operaciones de creación de PDF siguiendo las instrucciones proporcionadas en este artículo.

Para crear servidores web en Node.js, Hapi.js proporciona un marco versátil y amigable para el usuario con una interfaz confrontada externamente que hace simple establecer rutas y manejar solicitudes HTTP. Este marco se enriquece con IronPDF, que ofrece un conjunto extenso de funciones para crear PDFs, inclusive combinando documentos PDF, agregando encabezados y pies de página, y convirtiendo texto HTML a PDF.

Hapi.js e IronPDF son opciones confiables para integrar capacidades de creación de PDF en sus aplicaciones de Node.js debido a su extensa documentación y soporte activo de la comunidad desarrolladora. Esta integración proporciona un método simple para agregar capacidades de creación de PDF a sus aplicaciones, independientemente de su nivel de experiencia en desarrollo.

Podemos garantizar soluciones de software ricas en características y de alta gama para clientes y usuarios finales integrando IronPDF y productos de Iron Software en su pila de desarrollo. Además, esto ayudará con la optimización de proyectos y procesos. Los precios para Iron Software comienzan en $799. Estas herramientas son una buena opción para proyectos de desarrollo de software contemporáneos por su documentación exhaustiva, vibrante comunidad de desarrolladores en línea y actualizaciones frecuentes.

Darrius Serrant
Ingeniero de Software Full Stack (WebOps)

Darrius Serrant tiene una licenciatura en Ciencias de la Computación de la Universidad de Miami y trabaja como Ingeniero de Marketing WebOps Full Stack en Iron Software. Atraído por la programación desde joven, vio la computación como algo misterioso y accesible, convirtiéndolo en el ...

Leer más