Code Development Technology

NestJS para Principiantes: Primeros Pasos y Conceptos Clave

1. Introducción a NestJS 

NestJS es un framework progresivo de Node.js creado para construir aplicaciones backend eficientes y escalables. Inspirado en Angular, este framework utiliza TypeScript como su lenguaje principal y aprovecha su sistema de tipos y orientación a objetos para proporcionar una estructura clara y modular. 

Fuente: https://nestjs.com/ 

¿Por qué elegir NestJS? 

NestJS se destaca por su capacidad para construir aplicaciones sólidas, modulares y fáciles de mantener. A diferencia de otros frameworks de Node.js cómo Express, que tienden a ser minimalistas y a depender de librerías adicionales, NestJS ofrece una arquitectura estructurada desde el inicio, optimizada para grandes aplicaciones. Aquí hay algunas de las principales ventajas de usar NestJS: 

  • Modularidad: Permite dividir el código en módulos, lo cual facilita su organización y escalabilidad, especialmente en aplicaciones grandes. 
  • Escalabilidad: Gracias a su enfoque en el desarrollo modular y el uso de principios de programación orientada a objetos, NestJS facilita la escalabilidad de aplicaciones grandes. 
  • Flexibilidad: Soporta múltiples enfoques de desarrollo, como APIs REST y GraphQL, y se integra bien con microservicios y WebSockets para aplicaciones en tiempo real. 
  • TypeScript: Utiliza TypeScript, lo cual mejora la seguridad del código al detectar errores en tiempo de desarrollo y facilita la colaboración en equipos grandes. 
  • Inyección de Dependencias: La inyección de dependencias está integrada en NestJS, lo que permite construir aplicaciones más modulares y fáciles de testear. 

Casos de uso comunes para NestJS 

NestJS es ideal para una variedad de aplicaciones backend, incluidas: 

  • APIs REST: Su capacidad para construir APIs eficientes y robustas lo convierte en una opción popular para este tipo de aplicaciones. 
  • Microservicios: Proporciona un excelente soporte para crear y gestionar microservicios distribuidos, con integración para servicios basados en mensajes como Redis, RabbitMQ y Kafka. 
  • Aplicaciones en tiempo real: Gracias a su soporte nativo para WebSockets, NestJS es perfecto para construir aplicaciones que requieren actualizaciones en tiempo real, como chats y notificaciones en vivo. 

2. Instalación de NestJS y Configuración del Entorno 

Empezar con NestJS es fácil, gracias a su CLI (Command Line Interface), que facilita la creación y administración de proyectos. Aquí tienes una guía paso a paso para instalar NestJS y configurar el entorno. 

Prerrequisitos 

Antes de comenzar, asegúrate de tener lo siguiente instalado en tu máquina: 

  • Node.js (versión 14 o superior) y npm o yarn

Puedes verificar si están instalados ejecutando los siguientes comandos en la terminal: 

node -v 

npm -v

# o, si prefieres yarn:

yarn -v

Paso 1: Instalación de la CLI de NestJS 

Para simplificar el desarrollo, NestJS ofrece una CLI que facilita la creación y administración de proyectos. Para instalar la CLI, ejecuta el siguiente comando: 

npm install -g @nestjs/cli 

Esto instalará  CLI de NestJS de manera global en tu sistema. 

Paso 2: Crear un Nuevo Proyecto 

Una vez instalada la CLI, puedes crear un nuevo proyecto de NestJS con el siguiente comando: 

nest new nombre-del-proyecto 

La CLI te pedirá que elijas un gestor de paquetes (npm o yarn). Una vez seleccionado, generará la estructura básica del proyecto e instalará las dependencias necesarias. 

Paso 3: Arrancar la Aplicación 

Para iniciar la aplicación, simplemente navega a la carpeta del proyecto y ejecuta:

npm run start 

Por defecto, la aplicación estará disponible en http://localhost:3000. Deberías ver un mensaje que dice «Hello World!» cuando accedes a la URL en tu navegador. 

Paso 4: Modo de Desarrollo (Hot Reloading) 

NestJS soporta recarga en caliente, lo que significa que puedes ver los cambios en tiempo real mientras desarrollas. Para ejecutar el proyecto en modo de desarrollo, usa el siguiente comando: 

npm run start:dev 

Con este modo activo, la aplicación se recargará automáticamente cada vez que hagas cambios en el código, acelerando el proceso de desarrollo. 

3. Exploración de la Estructura del Proyecto en NestJS 

NestJS organiza los proyectos de manera modular, lo que facilita dividir el código en secciones independientes y reutilizables. Al crear un nuevo proyecto, NestJS genera una estructura básica que sirve como punto de partida para cualquier aplicación. A continuación, exploraremos los principales archivos y carpetas generados por defecto y su función en la arquitectura de NestJS. 

Estructura de Carpeta Predeterminada 

Al ejecutar el comando

nest new nombre-del-proyecto

se crea una estructura de carpetas similar a la siguiente: 

Fuente: Jorge Mujica 

Archivos Principales en el Proyecto 

  1. src/app.controller.ts 
    Este archivo contiene el controlador principal (AppController), que define los puntos de entrada para gestionar las solicitudes HTTP entrantes. Los controladores en NestJS son responsables de manejar rutas específicas y de procesar las solicitudes que recibe la aplicación, asignando las peticiones a los métodos adecuados. 
  1. src/app.service.ts 
    El archivo AppService es el servicio asociado al controlador principal y contiene la lógica de negocio básica de la aplicación. Los servicios en NestJS son responsables de realizar tareas específicas o de gestionar el procesamiento de datos, proporcionando una capa de lógica que puede ser utilizada por múltiples controladores. 
  1. src/app.module.ts 
    Este es el módulo raíz (AppModule) de la aplicación. NestJS organiza el código en módulos para crear una estructura escalable y modular. El archivo app.module.ts importa y organiza los módulos, controladores y servicios utilizados en la aplicación, proporcionando un punto central para gestionar la configuración del módulo raíz. 
  1. src/main.ts 
    Es el archivo de entrada de la aplicación, donde se inicializa la instancia de la aplicación NestJS. Aquí se configura y arranca el servidor HTTP de la aplicación. En main.ts, el código estándar crea una instancia de la aplicación y la ejecuta en un puerto determinado. 
     
Fuente: Jorge Mujica 

¿Cómo se organizan los Módulos, Controladores y Servicios en NestJS? 

NestJS utiliza la arquitectura modular para organizar y dividir el código en piezas reutilizables. A medida que una aplicación crece, puedes organizarla en módulos adicionales (por ejemplo, UserModule, AuthModule, ProductModule, etc.), cada uno de los cuales contiene sus propios controladores y servicios. 

  • Módulos: Cada módulo agrupa funcionalidad relacionada, como controladores y servicios, y los hace accesibles al resto de la aplicación. 
  • Controladores: Manejan las solicitudes HTTP y definen las rutas que el servidor puede procesar. 
  • Servicios: Contienen la lógica de negocio de la aplicación y se pueden reutilizar en múltiples controladores o módulos. 

La estructura modular y separada de NestJS hace que el código sea más limpio y fácil de mantener, permitiendo un escalado eficiente a medida que la aplicación crece. 

4. Conceptos Clave en NestJS 

Para entender y trabajar eficientemente en NestJS, es importante conocer los conceptos clave que estructuran su arquitectura y la manera en que se diseñan las aplicaciones en este framework. 

Módulos 

Los módulos son el núcleo de la arquitectura de NestJS, permitiendo organizar el código en unidades lógicas que pueden reutilizarse y aislarse. Cada módulo encapsula su propio conjunto de servicios, controladores y proveedores, y estos módulos pueden importarse en otros módulos cuando sea necesario. 

Por ejemplo, podrías tener un módulo UserModule para manejar toda la funcionalidad relacionada con usuarios, y un AuthModule para la autenticación. 

Fuente: Jorge Mujica 

Controladores 

Los controladores son responsables de recibir las solicitudes HTTP y devolver respuestas al cliente. En NestJS, los controladores definen rutas y se asocian con métodos HTTP específicos (GET, POST, PUT, DELETE, etc.). 

Cada controlador está decorado con @Controller() y sus métodos pueden ser decorados con @Get(), @Post(), @Put(), y @Delete() para definir rutas específicas: 

Fuente: Jorge Mujica 

Servicios 

Los servicios en NestJS contienen la lógica de negocio y son reutilizables en los controladores o en otros servicios. Los servicios permiten implementar lógica compleja sin sobrecargar los controladores, manteniendo el código modular y fácil de probar. 

Los servicios se definen con @Injectable() para que puedan ser inyectados en los controladores usando la inyección de dependencias

Fuente: Jorge Mujica 

Decoradores 

NestJS utiliza decoradores para definir la estructura de una aplicación. Algunos decoradores clave incluyen: 

  • @Controller(): Define una clase como controlador de un conjunto de rutas. 
  • @Get(), @Post(), @Put(), @Delete(): Asocian métodos del controlador con rutas HTTP específicas. 
  • @Injectable(): Marca una clase como un proveedor que puede ser inyectado en otros controladores o servicios. 
  • @Module(): Define una clase como un módulo. 

Inyección de Dependencias 

La inyección de dependencias permite instanciar clases y gestionarlas sin necesidad de instanciarlas manualmente. En NestJS, los servicios y proveedores pueden ser inyectados automáticamente en controladores o en otros servicios, lo que facilita la modularidad y el testeo. 

Por ejemplo, al agregar UserService en el controlador UserController, NestJS se encarga de inyectar automáticamente el servicio sin que tengas que hacerlo manualmente: 

Fuente: Jorge Mujica 

Esta organización basada en módulos, controladores, servicios y la inyección de dependencias facilita el desarrollo de aplicaciones escalables y de fácil mantenimiento en NestJS. 

5. Recursos Adicionales y Comunidad 

Aprender y dominar NestJS es más fácil con el apoyo de recursos adicionales y una comunidad activa que brinda soporte, ideas y nuevas herramientas para mejorar tu experiencia de desarrollo. La comunidad de NestJS ha crecido rápidamente, y existen múltiples recursos, como documentación oficial, foros, y canales de comunicación, que pueden ayudarte a resolver dudas y estar al tanto de las novedades del framework. 

Documentación Oficial y Tutoriales 

  1. Documentación Oficial de NestJS 
    La documentación oficial de NestJS es completa y bien estructurada. Cubre desde los conceptos básicos hasta características avanzadas, y cada sección incluye ejemplos claros de código que ilustran cómo aplicar los conceptos en proyectos reales. Es un recurso esencial para entender a fondo la arquitectura de NestJS y sus módulos, así como las mejores prácticas. 
  1. Documentación Oficial de NestJS 
  1. Tutoriales y Ejemplos en GitHub 
    NestJS tiene un repositorio oficial en GitHub con ejemplos y aplicaciones de referencia. Estos ejemplos ofrecen una excelente oportunidad para ver cómo se implementan diferentes módulos y funcionalidades en proyectos reales. Además, la comunidad ha creado numerosos tutoriales en línea, desde la creación de una API RESTful básica hasta la integración de funcionalidades más avanzadas como la autenticación, autorización y el uso de WebSockets. 
  1. NestJS GitHub 

Conclusión 

NestJS es un framework poderoso que combina lo mejor de TypeScript con una arquitectura sólida y modular, inspirada en conceptos de backend comprobados como la inyección de dependencias y el uso de controladores, servicios y módulos. Para los principiantes, NestJS ofrece una estructura clara y herramientas que simplifican el desarrollo de aplicaciones escalables y mantenibles, haciendo que la curva de aprendizaje valga la pena. 

Comenzando con la comprensión de su estructura básica y los conceptos esenciales, los desarrolladores pueden construir aplicaciones organizadas y preparadas para crecimiento. Al dominar estos primeros pasos y conceptos clave, tendrás una base sólida para crear aplicaciones más complejas y adaptadas a tus necesidades. 

es_ESES