Introducción a NestJS
NestJS es un framework progresivo de Node.js diseñado para construir aplicaciones de servidor (backend) eficientes, confiables y escalables. Está construido con TypeScript de forma nativa y combina elementos de la Programación Orientada a Objetos (POO), la Programación Funcional (FP) y la Programación Reactiva Funcional (FRP).
1. Fundamentos Conceptuales y Arquitectura
NestJS proporciona una arquitectura de aplicación lista para usar (out-of-the-box) que permite a los desarrolladores y equipos crear aplicaciones altamente testeables, escalables, sueltamente acopladas y fáciles de mantener. Se inspira fuertemente en patrones de diseño probados en el desarrollo enterprise, como la Inyección de Dependencias (DI) y la arquitectura de controladores y servicios (estilo Angular o Spring Boot).
A. Ciclo de Vida de una Solicitud (Request Lifecycle)
En NestJS, las solicitudes HTTP entrantes atraviesan una serie de capas organizadas secuencialmente antes de que la respuesta sea enviada de vuelta al cliente. Cada capa cumple un propósito específico dentro de la arquitectura de la aplicación:
Explicación Técnica de las Capas del Ciclo de Vida:
- Middlewares: Funciones que se ejecutan antes del manejador de la ruta. Tienen acceso a los objetos de solicitud (
req) y respuesta (res). Se utilizan comúnmente para tareas como registro de logs (logging), parsing de body o validación de cabeceras. - Guards (Guardias): Determinan si una solicitud dada será manejada por el controlador o no, dependiendo de condiciones específicas (por ejemplo, autenticación de usuarios o permisos basados en roles).
- Interceptors (Interceptores): Permiten vincular lógica extra antes o después de la ejecución del método objetivo, transformar el resultado devuelto por una función o extender el comportamiento básico.
- Pipes (Tuberías): Se utilizan para dos casos de uso principales: transformación (convertir datos de entrada al formato deseado, como string a number) y validación (evaluar si los datos de entrada son válidos según reglas definidas en DTOs).
- Controllers (Controladores): Responsables de recibir las solicitudes entrantes, procesar las rutas HTTP (
GET,POST,PUT,DELETE) y retornar las respuestas apropiadas al cliente. - Services (Servicios / Providers): Contienen la lógica de negocio pura de la aplicación. Son inyectados en los controladores mediante Inyección de Dependencias.
- Exception Filters (Filtros de Excepciones): Capturan todos los errores no manejados generados a lo largo de la aplicación para procesarlos y devolver una respuesta HTTP limpia y estandarizada al cliente.
2. Recurso Visual y Hoja de Ruta
A continuación puedes consultar la presentación interactiva del módulo y la hoja de atajos (Cheatsheet) oficial con los comandos e instrucciones clave de NestJS.