En esta página

¿Qué es NestJS?

12 min lectura TextoCap. 1 — Fundamentos de NestJS

¿Qué es NestJS y por qué existe?

NestJS es un framework progresivo para construir aplicaciones de servidor eficientes y escalables con Node.js. Creado por Kamil Myśliwiec en 2017 y actualmente en su versión 11, NestJS resuelve uno de los problemas más frustrantes del ecosistema Node.js: la falta de estructura y opinión en proyectos grandes.

Cuando trabajas con Express o Fastify puros, tienes una enorme libertad para organizar tu código. Esa libertad es una espada de doble filo: en proyectos pequeños es genial, pero en equipos de 5 o más desarrolladores trabajando durante meses, cada persona termina organizando las cosas de manera diferente. El resultado es una base de código difícil de mantener y escalar.

NestJS toma lo mejor de Angular —su sistema de módulos, decoradores, inyección de dependencias y separación de responsabilidades— y lo adapta al lado del servidor. Si ya conoces Angular, te sentirás en casa de inmediato. Si no lo conoces, aprenderás patrones de diseño que se aplican en toda la industria del software empresarial.

La arquitectura de tres pilares

NestJS organiza toda aplicación en torno a tres conceptos fundamentales que trabajan en conjunto:

Módulos (@Module)

Un módulo es la unidad organizativa básica en NestJS. Cada característica de tu aplicación debería vivir en su propio módulo: usuarios, productos, autenticación, pagos, etc. El módulo raíz (AppModule) ensambla todos los módulos de funcionalidades y arranca la aplicación.

Controladores (@Controller)

Los controladores son los responsables de recibir peticiones HTTP y devolver respuestas. Cada método de un controlador está decorado con el verbo HTTP correspondiente (@Get, @Post, @Put, @Delete, etc.) y la ruta a la que responde.

Proveedores (@Injectable)

Los proveedores son clases que pueden ser inyectadas como dependencias. Los servicios son el tipo más común de proveedor: contienen la lógica de negocio y pueden ser compartidos entre múltiples controladores. Otros ejemplos de proveedores son repositorios, factories y helpers.

NestJS como capa de abstracción sobre Express y Fastify

Un aspecto fundamental de NestJS que muchos desarrolladores pasan por alto: NestJS no es un servidor HTTP por sí mismo. Es una capa de abstracción que se sienta encima de Express o Fastify.

Express (adaptador por defecto): Express 5 es el servidor HTTP subyacente cuando creas un proyecto NestJS con la configuración predeterminada. Esto significa que toda la API de Express es accesible si la necesitas, y todos los middlewares de Express son compatibles directamente.

Fastify v5: Fastify es una alternativa de alto rendimiento que NestJS soporta de forma oficial mediante el paquete @nestjs/platform-fastify. Fastify v5 introduce soporte completo para TypeScript nativo, mejor validación de esquemas y rendimiento superior en benchmarks de alta concurrencia.

Esta abstracción significa que puedes cambiar el adaptador HTTP sin tocar tu lógica de negocio. Toda tu lógica de módulos, servicios y controladores permanece intacta.

TypeScript como ciudadano de primera clase

A diferencia de muchos frameworks que añaden soporte de TypeScript como una capa opcional, NestJS fue diseñado desde el día uno para TypeScript. El sistema de decoradores, la inyección de dependencias basada en metadatos y la integración con reflect-metadata son características que dependen directamente de las capacidades de TypeScript.

NestJS 11 utiliza TypeScript 5.x y aprovecha las características más modernas del lenguaje: decoradores stage 3, tipos genéricos avanzados, decoradores de parámetros y la inferencia de tipos más precisa disponible hoy.

Instalación y creación del primer proyecto

Para comenzar, instala el CLI de NestJS globalmente:

npm i -g @nestjs/cli

Crea tu primer proyecto:

nest new mi-primera-api

El CLI te preguntará qué gestor de paquetes prefieres (npm, yarn o pnpm). Una vez completada la instalación, tendrás esta estructura de archivos:

mi-primera-api/
├── src/
│   ├── app.controller.spec.ts
│   ├── app.controller.ts
│   ├── app.module.ts
│   ├── app.service.ts
│   └── main.ts
├── test/
│   ├── app.e2e-spec.ts
│   └── jest-e2e.json
├── nest-cli.json
├── package.json
├── tsconfig.build.json
└── tsconfig.json

Para arrancar el servidor en modo desarrollo con recarga automática:

cd mi-primera-api
npm run start:dev

Visita http://localhost:3000 y verás el mensaje Hello World!. Ya tienes tu primera aplicación NestJS corriendo.

El CLI de NestJS: tu mejor aliado

El CLI de NestJS es mucho más que un simple generador de proyectos. Puede generar todos los elementos arquitectónicos que necesitas:

# Generar un módulo
nest generate module usuarios

# Generar un controlador (dentro del módulo usuarios)
nest generate controller usuarios

# Generar un servicio
nest generate service usuarios

# Generar todos los elementos CRUD de un recurso completo
nest generate resource productos

El comando nest generate resource es especialmente poderoso: genera el módulo, controlador, servicio, DTOs y entidad de un recurso completo con operaciones CRUD listas para implementar.

¿Por qué elegir NestJS para tu próximo proyecto?

Escalabilidad arquitectónica: El sistema de módulos garantiza que cada equipo pueda trabajar de forma independiente en su feature module sin pisar el trabajo de otros. Puedes extraer módulos a microservicios cuando el proyecto crezca.

Productividad del equipo: La estructura predecible reduce el tiempo de onboarding de nuevos desarrolladores. Un desarrollador familiar con NestJS puede ser productivo en un proyecto nuevo en horas, no días.

Ecosistema maduro: NestJS tiene integraciones oficiales con TypeORM, Mongoose, Prisma, Redis, RabbitMQ, Kafka, GraphQL, WebSockets, gRPC, Swagger, Passport y docenas de otras tecnologías. Rara vez necesitarás escribir una integración desde cero.

Testing nativo: NestJS fue diseñado pensando en el testing desde el principio. El módulo de testing incluido permite crear instancias de módulos aisladas con proveedores mock de forma sencilla.

Comunidad y soporte empresarial: Con más de 65,000 estrellas en GitHub y millones de descargas semanales, NestJS cuenta con una comunidad activa y un soporte empresarial a través de NestJS Enterprise.

En las próximas lecciones construiremos una API REST completa explorando cada uno de estos conceptos en profundidad. Comenzaremos con el sistema de módulos, que es la piedra angular de cualquier aplicación NestJS bien estructurada.

Compatibilidad de plataforma
NestJS soporta Express (por defecto) y Fastify v5. Fastify puede ser hasta 2× más rápido en benchmarks de throughput puro, pero Express tiene un ecosistema de middlewares mucho más grande. Elige Fastify si el rendimiento es crítico y Express si necesitas compatibilidad total con middlewares existentes.
Instala el CLI globalmente
Ejecuta `npm i -g @nestjs/cli` una sola vez y podrás usar `nest new`, `nest generate`, `nest build` y `nest start` en cualquier directorio de tu máquina.