¿Qué es NestJS?
NestJS es un framework de backend para [Link] diseñado para
construir aplicaciones escalables, eficientes y mantenibles. Combina
elementos de programación orientada a objetos (OOP), programación
funcional (FP) y programación reactiva (FRP), y está inspirado en
Angular (arquitectura modular e inyección de dependencias).
Desarrollado por: Kamil Mysliwiec.
Lenguaje: TypeScript (compatible con JavaScript).
Base: [Link] (o Fastify, bajo el capó).
✨ Características Clave
✅ Arquitectura Modular
Organiza el código en módulos, controladores, servicios y
proveedores.
✅ Inyección de Dependencias (DI)
Gestión automática de dependencias (similar a Angular/Spring).
✅ Soporte para TypeScript
Tipado estático para mayor seguridad y autocompletado.
✅ Multiples Transportes
HTTP (REST), WebSockets, GraphQL, Microservicios (TCP, MQTT,
etc.).
✅ Escalabilidad
Ideal para monolitos bien estructurados y microservicios.
✅ Ecosistema Integrado
Soporte para autenticación (JWT, OAuth), bases de datos
(TypeORM, Prisma), testing, etc.
✅ Performance
Usa [Link] o Fastify (más rápido que Express por defecto).
📊 NestJS vs Otros Frameworks
Caracterís
NestJS [Link] Fastify
tica
Arquitect Minimalista
Modular (DI, OOP) Plugin-based
ura (middleware)
Caracterís
NestJS [Link] Fastify
tica
Performa
Alto (con Fastify) Medio ⚡ Muy alto
nce
TypeScrip ❌ (Requiere ✅ (Soporte
✅ Soporte nativo
t config) opcional)
Apps
Casos de
complejas/microservic APIs simples APIs rápidas
Uso
ios
📌 Casos de Uso Ideales
✔ APIs REST/GraphQL escalables.
✔ Microservicios empresariales.
✔ Aplicaciones con lógica compleja y mantenibilidad a largo plazo.
📂 Estructura de un Proyecto NestJS
bash
Copy
Download
src/
├── [Link] # Módulo raíz
├── [Link] # Punto de entrada
├── user/ # Módulo de ejemplo (CRUD)
│ ├── [Link] # Controlador (rutas)
│ ├── [Link] # Lógica de negocio
│ ├── [Link] # Config del módulo
│ └── dto/ # Data Transfer Objects
Ejemplo Básico
1. Controlador (REST API)
typescript
Copy
Download
// [Link]
import { Controller, Get, Post } from '@nestjs/common';
@Controller('users')
export class UserController {
@Get()
findAll(): string {
return 'Lista de usuarios';
}
@Post()
create(): string {
return 'Usuario creado';
}
}