AYUDA PARA NODOS

NestJS Node.js (Cómo funciona para desarrolladores)

Publicado en 29 de septiembre, 2024
Compartir:

Introducción

Un marco flexible y progresivo de Node.js, NestJS está diseñado para crear aplicaciones del lado del servidor efectivas y escalables, así como aplicaciones frontend extensibles. Hace uso de TypeScript, un superconjunto de JavaScript con tipado estático, para mejorar la mantenibilidad del código y la eficiencia del desarrollador. NestJS es un diseño modular y resiliente que incorpora principios de programación funcional.(FP), programación orientada a objetos(OOP)y la programación reactiva funcional(FRP). NestJS promueve la escritura de código altamente comprobable y mantenible al simplificar el proceso de desarrollo y colocar un gran énfasis en la modularidad, la inyección de dependencias y los decoradores.

Por el contrario, IronPDF es una potente biblioteca diseñada para facilitar la creación, edición y manipulación de documentos PDF en aplicaciones Node.js. Puede convertir HTML a PDF, combinar archivos PDF, agregar marcas de agua y extraer texto e imágenes de archivos PDF, entre muchas otras funciones. IronPDF ofrece una API sencilla para crear y gestionar dinámicamente PDFs, y se integra fácilmente con aplicaciones escalables del lado del servidor de Node.js.

Los desarrolladores pueden crear aplicaciones en línea intrincadas y complejas que necesitan la creación y manipulación dinámica de PDF combinando NestJS e IronPDF. Las aplicaciones que generan informes, facturas y otras operaciones impulsadas por documentos pueden encontrar esta integración especialmente útil. Con la ayuda de las sólidas capacidades PDF de IronPDF y el diseño organizado y modular de NestJS, los desarrolladores pueden crear aplicaciones de alto rendimiento y proyectos increíbles con funciones sofisticadas de procesamiento de documentos.

¿Qué es NestJS?

NestJSes un framework progresivo de código abierto para el desarrollo de aplicaciones del lado del servidor con Node.js que es eficaz y escalable. Está escrito en TypeScript y utiliza una arquitectura modular influenciada por Angular para aumentar la eficiencia del desarrollador con las características contemporáneas de JavaScript. NestJS utiliza inyección de dependencias y decoradores para fomentar un código bien organizado, lo que da como resultado aplicaciones muy probadas y mantenibles.

Los desarrolladores pueden diseñar una amplia gama de aplicaciones con el framework porque admite muchas capas de transporte, incluyendo HTTP, WebSockets y gRPC. Ofrece versatilidad y robustez a través de una integración fluida con frameworks populares de Node.js como Express y Fastify. NestJS también facilita a los desarrolladores la construcción de aplicaciones complicadas al proporcionar soporte integrado para bases de datos, autenticación y validación.

NestJS es una herramienta perfecta para desarrollar soluciones serverless eficientes, microservicios y aplicaciones a nivel empresarial gracias a su amplio Nest CLI, su documentación exhaustiva y su comunidad vibrante. Es una opción popular para las herramientas de desarrollo web contemporáneo debido a su diseño modular, que garantiza escalabilidad y facilidad de mantenimiento. Permite a los desarrolladores crear aplicaciones front-end extensibles y mejorar la productividad del desarrollador.

NestJS Node.js(Cómo funciona para desarrolladores): Figura 1 - NestJS

Características de NestJS

Compatibilidad con TypeScript

TypeScript, un superconjunto de JavaScript con tipado estático que ofrece autocompletado sofisticado, seguridad de tipos y características de lenguaje contemporáneo, se utiliza en la construcción de NestJS. Esto incrementa la mantenibilidad del código y ayuda en la detección de errores durante la compilación. NestJS admite JavaScript así como TypeScript por defecto, brindando a los desarrolladores mayor libertad.

Arquitectura modular

NestJS fomenta la organización de código basada en módulos. Es más fácil mantener, escalar y organizar el código cuando los componentes relacionados, como controladores, proveedores y servicios, están encapsulados en un único módulo. Los módulos de la aplicación pueden utilizarse en otras áreas, fomentando el principio DRY(No te repitas)filosofía.

Inyección de dependencia

Una de las características principales de NestJS que facilita la gestión de dependencias es un sofisticado sistema de inyección de dependencias. Mediante el uso de la inyección de dependencias en lugar de codificarlas directamente, NestJS crea componentes poco acoplados y comprobables. Este estilo también permite un código más modular y una mejor separación de preocupaciones.

Decoradores

Los decoradores se utilizan ampliamente en NestJS para crear y configurar clases y sus miembros. El uso de decoradores como @Controller(), @Get(), @Post(), @Injectable(), y otros mejoran la legibilidad y expresividad del código al dejar en claro qué hace cada componente de la aplicación y cómo se comporta.

Compatibilidad con Express y Fastify

Debido a su adaptabilidad, NestJS ofrece a los desarrolladores la opción de usar Fastify o Express como el servidor HTTP subyacente. Aunque Fastify ofrece un mejor rendimiento, Express es conocido por ser fácil de usar y eficiente. Debido a esta versatilidad, los desarrolladores pueden adaptar sus aplicaciones para cumplir con requisitos únicos.

Middleware

NestJS admite funcionalidades de middleware similares a Express. Antes de que las solicitudes lleguen a los manejadores de rutas, el middleware puede gestionarlas, proporcionando características como el análisis de cuerpos, autenticación y registro. Esto facilita la implementación de lógica reutilizable para manejar solicitudes.

Gestión de excepciones

NestJS tiene un sólido sistema de manejo de excepciones que permite a los programadores crear filtros de excepciones únicos. Estos filtros pueden mejorar la gestión de errores y la uniformidad de las respuestas en toda la aplicación al capturar y manejar excepciones de manera estandarizada.

Tuberías y Guardianes

Pipes: La transformación y validación de datos se realizan utilizando pipes. Pueden implementarse a nivel de controlador, a nivel de manejador de rutas o de manera global. Las tuberías de validación y transformación están integradas, y también se pueden crear tuberías personalizadas.

Guardias: La lógica para la autorización y autenticación es implementada por los guardias. Utilizan reglas específicas, como verificar roles de usuario o permisos, para decidir si aprueban una solicitud.

Crear y configurar NextJs

Un proyecto NestJS se puede crear y configurar en unos pocos pasos sencillos. Aquí tienes una guía completa para comenzar a crear un nuevo proyecto.

Instalar el CLI de NestJS

Instala el CLI de NestJS globalmente primero, ya sea con yarn o npm.

npm install -g @nestjs/cli
npm install -g @nestjs/cli
'INSTANT VB TODO TASK: The following line uses invalid syntax:
'npm install -g @nestjs/cli
VB   C#

Crear un nuevo proyecto

Para comenzar un nuevo proyecto NestJS, utiliza la CLI. Cambia "my-nest-app" por el nombre del proyecto que desees.

nest new my-nest-app
nest new my-nest-app
'INSTANT VB TODO TASK: The following line uses invalid syntax:
'nest New my-nest-app
VB   C#

Estructura del Proyecto

Esta es una breve sinopsis de la estructura estándar del proyecto:

src/
├── app.controller.ts
├── app.controller.spec.ts
├── app.module.ts
├── app.service.ts
├── main.ts
test/
├── app.e2e-spec.ts
├── jest-e2e.json
src/
├── app.controller.ts
├── app.controller.spec.ts
├── app.module.ts
├── app.service.ts
├── main.ts
test/
├── app.e2e-spec.ts
├── jest-e2e.json
'INSTANT VB TODO TASK: The following line uses invalid syntax:
'src/ ├── app.controller.ts ├── app.controller.spec.ts ├── app.@module.ts ├── app.service.ts ├── main.ts test/ ├── app.e2e-spec.ts ├── jest-e2e.json
VB   C#
  • app.controller.ts: Contiene el controlador principal de la aplicación.
  • app.service.ts: Contiene el servicio principal de la aplicación.
  • app.module.ts: El módulo raíz de la aplicación.
  • main.ts: El punto de entrada de la aplicación.

Módulo de Configuración

Para gestionar configuraciones, instala el paquete @nestjs/config.

npm install @nestjs/config
npm install @nestjs/config
'INSTANT VB TODO TASK: The following line uses invalid syntax:
'npm install @nestjs/config
VB   C#

Agrega el módulo de configuración al archivo app.module.ts.

import { Module } from '@nestjs/common';
import { ConfigModule } from '@nestjs/config';
import { AppController } from './app.controller';
import { AppService } from './app.service';
@Module({
  imports: [
    ConfigModule.forRoot({
      isGlobal: true, // Make the module global
    }),
  ],
  controllers: [AppController],
  providers: [AppService],
})
export class AppModule {}
import { Module } from '@nestjs/common';
import { ConfigModule } from '@nestjs/config';
import { AppController } from './app.controller';
import { AppService } from './app.service';
@Module({
  imports: [
    ConfigModule.forRoot({
      isGlobal: true, // Make the module global
    }),
  ],
  controllers: [AppController],
  providers: [AppService],
})
export class AppModule {}
import
If True Then
	System.Reflection.Module
End If
'INSTANT VB TODO TASK: The following line uses invalid syntax:
'from '@nestjs/common'; import { ConfigModule } from '@nestjs/config'; import { AppController } from './app.controller'; import { AppService } from './app.service'; @Module({ @imports: [ConfigModule.forRoot({ isGlobal: True}),], controllers: [AppController], providers: [AppService]}) export class AppModule {}
VB   C#

Para acceder a las variables de entorno, utilice el servicio de configuración.

import { Injectable } from '@nestjs/common';
import { ConfigService } from '@nestjs/config';
@Injectable()
export class AppService {
  constructor(private configService: ConfigService) {}
  getHello(): string {
    return `Hello World!`;
  }
}
import { Injectable } from '@nestjs/common';
import { ConfigService } from '@nestjs/config';
@Injectable()
export class AppService {
  constructor(private configService: ConfigService) {}
  getHello(): string {
    return `Hello World!`;
  }
}
import
If True Then
	Injectable
End If
'INSTANT VB TODO TASK: The following line uses invalid syntax:
'from '@nestjs/common'; import { ConfigService } from '@nestjs/config'; @Injectable() export class AppService { constructor(private configService: ConfigService) {} getHello(): string { Return `Hello World!`; } }
VB   C#

NestJS Node.js(Cómo Funciona Para Desarrolladores): Figura 2 - Salida del Proyecto NestJS

Primeros pasos

Para comenzar, crearemos una aplicación de ejemplo que genere un documento PDF con datos producidos dinámicamente usando NestJS e IronPDF. Este es un manual de instrucciones detallado que sigue paso a paso.

¿Qué es IronPDF?

Para simplificar el proceso de crear, editar y gestionar PDFs, una biblioteca de aplicaciones conocida comoIronPDFfue creado. Los desarrolladores pueden añadir encabezados y marcas de agua, combinar múltiples documentos PDF, extraer texto e imágenes de documentos HTML y realizar varias otras tareas con este programa. Gracias a la documentación exhaustiva de IronPDF y su API fácil de usar, los desarrolladores pueden crear fácilmente documentos PDF de alta calidad automáticamente. IronPDF tiene todas las características y funcionalidades necesarias para mejorar los flujos de trabajo de documentos y proporcionar excelentes experiencias de usuario en una variedad de contextos, incluidos la creación de facturas, informes y documentación.

NestJS Node.js(Cómo funciona para desarrolladores): Figura 3 - IronPDF

Características de IronPDF

Convertir HTML a PDF: Este es un proceso fácil y rápido que funciona con cualquier tipo de texto HTML, incluyendo JavaScript y CSS.

Fusión de archivos PDF: Combina varios documentos PDF en un solo archivo PDF para simplificar las tareas de gestión de documentos.

Extracción de texto e imágenes: Extrae texto e imágenes de archivos PDF para que puedan realizarse más procesos o análisis de datos con ellos.

Marca de agua: Puede aplicar marcas de agua de texto o imagen a páginas PDF para fines de marca o seguridad.

Incluir Encabezado y Pie de Página: Puedes agregar un mensaje personalizado o números de página a los encabezados y pies de página de los documentos PDF.

Instalar IronPDF

Utilice el administrador de paquetes de node para instalar los paquetes de Node.js necesarios para habilitar la funcionalidad de IronPDF.

npm install @ironsoftware/ironpdf
npm install @ironsoftware/ironpdf
'INSTANT VB TODO TASK: The following line uses invalid syntax:
'npm install @ironsoftware/ironpdf
VB   C#

Integrar NestJS con IronPDF Node.js

La instalación del paquete de Node.js de IronPDF, la creación de un servicio para gestionar la generación de PDF y la creación de un controlador para exponer endpoints para la generación de PDF son los pasos involucrados en la integración de IronPDF con una aplicación NestJS.

Crear un Servicio PDF

Para gestionar la generación de PDFs, cree un nuevo servicio. Este servicio convertirá la información HTML en PDFs utilizando IronPDF.

nest generate service pdf
nest generate service pdf
'INSTANT VB TODO TASK: The following line uses invalid syntax:
'nest generate service pdf
VB   C#

Aplica la lógica de generación de PDF en el archivo pdf.service.ts creado.

// src/pdf/pdf.service.ts
import { Injectable } from '@nestjs/common';
const IronPdf = require("@ironsoftware/ironpdf");
const document=IronPdf.PdfDocument;
var config=IronPdf.IronPdfGlobalConfig
config.setConfig({licenseKey:''});
@Injectable()
export class PdfService {
  async generatePdf(htmlContent: string): Promise<Buffer> {
   const pdf = (await document.fromHtml(htmlContent));
    const pdfBuffer=await pdf.saveAsBuffer();
    return pdfBuffer;
  }
}
// src/pdf/pdf.service.ts
import { Injectable } from '@nestjs/common';
const IronPdf = require("@ironsoftware/ironpdf");
const document=IronPdf.PdfDocument;
var config=IronPdf.IronPdfGlobalConfig
config.setConfig({licenseKey:''});
@Injectable()
export class PdfService {
  async generatePdf(htmlContent: string): Promise<Buffer> {
   const pdf = (await document.fromHtml(htmlContent));
    const pdfBuffer=await pdf.saveAsBuffer();
    return pdfBuffer;
  }
}
' src/pdf/pdf.service.ts
import
If True Then
	Injectable
End If
'INSTANT VB TODO TASK: The following line uses invalid syntax:
'from '@nestjs/common'; const IronPdf = require("@ironsoftware/ironpdf"); const document=IronPdf.PdfDocument; var config=IronPdf.IronPdfGlobalConfig config.setConfig({licenseKey:''}); @Injectable() export class PdfService { async generatePdf(htmlContent: string): Promise<Buffer> { const pdf = (await document.fromHtml(htmlContent)); const pdfBuffer=await pdf.saveAsBuffer(); Return pdfBuffer; } }
VB   C#

Crear un controlador PDF

Cree un controlador para hacer disponible un endpoint para la creación de PDF.

nest generate controller pdf
nest generate controller pdf
'INSTANT VB TODO TASK: The following line uses invalid syntax:
'nest generate controller pdf
VB   C#

Cree un endpoint en el archivo pdf.controller.ts resultante que tome entrada HTML y genere un PDF.

// src/pdf/pdf.controller.ts
import { Controller, Post, Body, Res } from '@nestjs/common';
import { PdfService } from './pdf.service';
import { Response } from 'express';
@Controller('pdf')
export class PdfController {
  constructor(private readonly pdfService: PdfService) {}
  @Post('generate')
  async generatePdf(@Body('html') htmlContent: string, @Res() res: Response) {
    const pdfBuffer = await this.pdfService.generatePdf(htmlContent);
    res.set({
      'Content-Type': 'application/pdf',
      'Content-Disposition': 'attachment; filename=generated.pdf',
      'Content-Length': pdfBuffer.length,
    });
    res.end(pdfBuffer);
  }
}
// src/pdf/pdf.controller.ts
import { Controller, Post, Body, Res } from '@nestjs/common';
import { PdfService } from './pdf.service';
import { Response } from 'express';
@Controller('pdf')
export class PdfController {
  constructor(private readonly pdfService: PdfService) {}
  @Post('generate')
  async generatePdf(@Body('html') htmlContent: string, @Res() res: Response) {
    const pdfBuffer = await this.pdfService.generatePdf(htmlContent);
    res.set({
      'Content-Type': 'application/pdf',
      'Content-Disposition': 'attachment; filename=generated.pdf',
      'Content-Length': pdfBuffer.length,
    });
    res.end(pdfBuffer);
  }
}
' src/pdf/pdf.controller.ts
import
If True Then
	Controller, Post, Body, Res
End If
'INSTANT VB TODO TASK: The following line uses invalid syntax:
'from '@nestjs/common'; import { PdfService } from './pdf.service'; import { Response } from 'express'; @Controller('pdf') export class PdfController { constructor(private readonly pdfService: PdfService) {} @Post('generate') async generatePdf(@Body('html') htmlContent: string, @Res() res: Response) { const pdfBuffer = await Me.pdfService.generatePdf(htmlContent); res.@set({ 'Content-Type': 'application/pdf', 'Content-Disposition': 'attachment; filename=generated.pdf', 'Content-Length': pdfBuffer.length}); res.@end(pdfBuffer); } }
VB   C#

IronPDF se utiliza para transformar el contenido HTML en un buffer de PDF, que luego se devuelve utilizando el PdfService. El PdfService utiliza IronPDF para renderizar HTML como un PDF. Esta integración se maneja fácilmente a través del controlador LoopBack. El siguiente paso es definir un endpoint de obtención, /generar-pdf, para recibir el contenido HTML del cliente. Usando la biblioteca IronPDF, convertimos los datos HTML proporcionados en un PDF dentro de la API.

Para ser más precisos, creamos un búfer binario del archivo PDF utilizando pdf.saveAsBuffer.()y crear un objeto PDF a partir de un archivo JSON usando IronPdf.fromHtml(htmlContenido). Después de eso, este búfer se devuelve al cliente con el tipo MIME apropiado.(aplicación/pdf). El servidor escucha en el puerto 3000 y registra cualquier problema encontrado durante el proceso de creación de PDF. En respuesta, el cliente recibe un código de estado 500 en caso de error. Esta configuración ayuda al crear facturas, informes u otros documentos para una aplicación web, ya que permite crear PDFs dinámicos a partir de contenido HTML.

NestJS Node.js(Cómo Funciona para Desarrolladores): Figura 4 - Salida de PDF

Conclusión

Combinar las sofisticadas capacidades de renderización de PDF de IronPDF con el diseño modular y confiable de NestJS ofrece una solución potente para la creación dinámica de PDF. Los desarrolladores pueden alcanzar una variedad de objetivos empresariales, incluyendo la producción de informes, facturas y documentación, al crear una aplicación del lado del servidor eficaz y escalable que pueda generar PDFs a partir de texto HTML siguiendo los procedimientos indicados anteriormente.

Las características de IronPDF se ven mejoradas por la modularidad, los decoradores y la inyección de dependencias de NestJS, lo que produce una base de código fácil de gestionar y probar. Con IronPDF manejando las complejidades de la producción de PDF, los desarrolladores pueden centrarse en la lógica empresarial y crear aplicaciones complicadas con facilidad gracias a esta combinación.

Al incorporar IronPDF y los productos de Iron Software en su pila de desarrollo de aplicaciones empresariales, podemos garantizar soluciones de software premium y ricas en funciones para clientes y usuarios finales. Además, los proyectos, sistemas backend y la optimización de procesos serán más simples con esta sólida base. IronSoftwaree IronPDF comienzan en $749 cada uno. La extensa documentación de estas tecnologías, su activa comunidad de desarrolladores en línea y sus actualizaciones regulares las hacen una excelente opción para proyectos de desarrollo de software modernos.

F

< ANTERIOR
fastify npm (Cómo funciona para desarrolladores)
SIGUIENTE >
Sequelize node js (Cómo funciona para desarrolladores)

¿Listo para empezar? Versión: 2024.11 acaba de salir

Instalación gratuita de npm Ver licencias >