Curso de programación con Nest
NestJS es el framework para construir aplicaciones backend escalables y eficientes en Node.js. Aprende a desarrollar con NestJS y mejora tu backend.
NestJS es un framework progresivo de Node.js que combina elementos de programación orientada a objetos, programación funcional y programación reactiva funcional.
Construido con TypeScript y fuertemente inspirado en Angular, NestJS proporciona una arquitectura escalable y mantenible para el desarrollo de aplicaciones del lado del servidor.
Filosofía y arquitectura del framework
NestJS adopta una arquitectura modular que facilita la organización del código en aplicaciones complejas. El framework utiliza decoradores de TypeScript y un sistema de inyección de dependencias robusto, permitiendo crear aplicaciones altamente testeable y mantenibles.
La estructura basada en módulos permite dividir la aplicación en componentes reutilizables y bien definidos. Cada módulo encapsula un conjunto relacionado de funcionalidades, promoviendo la separación de responsabilidades y facilitando el desarrollo en equipo.
@Module({
imports: [DatabaseModule],
controllers: [UserController],
providers: [UserService],
exports: [UserService]
})
export class UserModule {}
Sistema de controladores y enrutamiento
Los controladores en NestJS manejan las peticiones HTTP entrantes y devuelven respuestas al cliente. Utilizan decoradores para definir rutas y métodos HTTP, proporcionando una sintaxis clara y expresiva para la definición de endpoints.
@Controller('users')
export class UserController {
@Get()
findAll(): string {
return 'Esta acción devuelve todos los usuarios';
}
@Post()
create(@Body() createUserDto: CreateUserDto) {
return 'Esta acción añade un nuevo usuario';
}
}
El enrutamiento se gestiona mediante decoradores que mapean métodos HTTP específicos a funciones del controlador. Esta aproximación permite crear APIs RESTful de manera intuitiva y mantiene el código organizado según las operaciones que realiza.
Inyección de dependencias y servicios
El sistema de inyección de dependencias es uno de los pilares fundamentales de NestJS. Los servicios se definen como providers que pueden ser inyectados en controladores u otros servicios, promoviendo la reutilización de código y facilitando las pruebas unitarias.
@Injectable()
export class UserService {
private readonly users: User[] = [];
create(user: User): User {
this.users.push(user);
return user;
}
findAll(): User[] {
return this.users;
}
}
Los providers pueden tener diferentes scopes de vida, desde singleton hasta request-scoped, permitiendo un control granular sobre la gestión de instancias y el estado de la aplicación.
Integración con bases de datos
NestJS se integra perfectamente con TypeORM, uno de los ORM más populares para TypeScript. Esta integración permite trabajar con bases de datos relacionales utilizando el patrón Active Record o Data Mapper, proporcionando una capa de abstracción robusta para las operaciones de base de datos.
@Entity()
export class User {
@PrimaryGeneratedColumn()
id: number;
@Column()
name: string;
@Column()
email: string;
}
El patrón Repository facilita la separación entre la lógica de negocio y el acceso a datos, permitiendo crear consultas complejas de manera type-safe y manteniendo la consistencia en toda la aplicación.
Validación y transformación de datos
El framework incluye un sistema de pipes que permite validar y transformar datos de entrada antes de que lleguen a los controladores. Utilizando bibliotecas como class-validator, es posible definir reglas de validación declarativas directamente en los DTOs (Data Transfer Objects).
export class CreateUserDto {
@IsString()
@IsNotEmpty()
name: string;
@IsEmail()
email: string;
@IsInt()
@Min(18)
age: number;
}
La serialización automática permite controlar qué datos se exponen en las respuestas de la API, proporcionando una capa adicional de seguridad y control sobre la información que se envía al cliente.
Middleware y interceptores
Los middlewares en NestJS funcionan de manera similar a Express.js, permitiendo ejecutar código antes de que la petición llegue al controlador. Son útiles para tareas como logging, autenticación, y modificación de peticiones.
Los interceptores proporcionan una funcionalidad más avanzada, permitiendo transformar tanto peticiones como respuestas, implementar caché, manejar timeouts, y ejecutar lógica adicional antes y después de la ejecución del método del controlador.
@Injectable()
export class LoggingInterceptor implements NestInterceptor {
intercept(context: ExecutionContext, next: CallHandler): Observable<any> {
const now = Date.now();
return next
.handle()
.pipe(
tap(() => console.log(`Después... ${Date.now() - now}ms`))
);
}
}
Seguridad y autenticación
NestJS proporciona herramientas robustas para implementar autenticación y autorización. El framework se integra con Passport.js, permitiendo utilizar múltiples estrategias de autenticación como JWT, OAuth, y autenticación local.
Los guards actúan como middleware de autorización, determinando si una petición debe ser procesada por el controlador basándose en criterios como roles de usuario, permisos, o estado de autenticación.
@Injectable()
export class JwtAuthGuard extends AuthGuard('jwt') {}
@Controller('protected')
@UseGuards(JwtAuthGuard)
export class ProtectedController {
@Get()
getProtectedResource() {
return 'Este recurso está protegido';
}
}
Gestión de errores y logging
El manejo de errores en NestJS es centralizado y configurable. El framework proporciona filtros de excepción que capturan errores no manejados y los transforman en respuestas HTTP apropiadas.
El sistema de logging integrado permite registrar eventos importantes de la aplicación, con diferentes niveles de severidad y la posibilidad de configurar múltiples transportes para los logs.
Herramientas de desarrollo
El NestJS CLI es una herramienta de línea de comandos que acelera el desarrollo proporcionando generadores para controladores, servicios, módulos, y otros componentes. También incluye comandos para ejecutar, construir, y probar la aplicación.
nest generate controller users
nest generate service users
nest generate module users
La integración con TypeScript proporciona tipado estático, autocompletado inteligente, y detección temprana de errores, mejorando significativamente la experiencia de desarrollo y la calidad del código.
Escalabilidad y rendimiento
NestJS está diseñado para aplicaciones empresariales que requieren alta escalabilidad y rendimiento. El framework soporta microservicios, permitiendo dividir aplicaciones monolíticas en servicios más pequeños y especializados.
La arquitectura basada en módulos facilita el desarrollo en equipo y permite que diferentes partes de la aplicación evolucionen independientemente, reduciendo el acoplamiento y mejorando la mantenibilidad a largo plazo.
El soporte nativo para programación asíncrona y la integración con RxJS permiten manejar operaciones concurrentes de manera eficiente, optimizando el rendimiento de la aplicación en escenarios de alta carga.
Tutoriales de Nest
Aprende Nest con tutoriales de programación en Nest.
Introducción E Instalación Nestjs
Introducción Y Entorno
Comandos Nestjs Cli
Introducción Y Entorno
Métodos Get En Controladores
Controladores
Métodos Post En Controladores
Controladores
Métodos Put En Controladores
Controladores
Métodos Delete En Controladores
Controladores
Gestión De Errores En Controladores
Controladores
Recibir Y Servir Imágenes
Controladores
Desarrollo E Inyección De Servicios
Servicios E Inyección De Dependencias
Crear Y Utilizar Módulos
Módulos
Configuración De Typeorm Con Mysql
Typeorm
Creación De Entidades Y Tablas
Typeorm
Decoradores En Entidades
Typeorm
Crud Con Repositorios
Typeorm
Filtrados En Consultas De Repositorios
Typeorm
Registro De Usuarios
Autenticación
Iniciar Sesión Método De Login
Autenticación
Estrategia De Autenticación Jwtstrategy
Autenticación
Login Y Registro
Autenticación
Estrategia De Autenticación Jwt
Autenticación
Ejercicios de programación de Nest
Evalúa tus conocimientos en Nest con ejercicios de programación Nest de tipo Test, Puzzle, Código y Proyecto con VSCode.
Métodos GET en controladores
Método find en un servicio con repositorio
Desarrollo e inyección de servicios
Creación de entidades y tablas
Filtrados en consultas de repositorios
Método GET en un controlador
Estrategia de autenticación JwtStrategy
Método PUT en un controlador
CRUD con repositorios
Método delete en un servicio con repositorio
Método DELETE en un controlador
API REST CRUD de entidad Restaurante con TypeORM
Creación de una entidad TypeORM
Crear y utilizar módulos
Métodos PUT en controladores
Iniciar sesión método de login
Configuración de TypeORM con MySQL
Gestión de errores en controladores
Decoradores en entidades
Instalación NestJS
Recibir y servir imágenes
Estrategia de autenticación JWT
Comandos NestJS CLI
Método POST en un controlador
Login y registro
API REST CRUD de entidades Product y Manufacturer
Método save en un servicio con repositorio
Registro de usuarios
Métodos POST en controladores
Tipo de tecnología
Framework
Categoría laboral
Backend
Año de lanzamiento
2017
Developers
Kamil Mysliwiec
Todos los módulos del curso de Nest
Nest
Introducción y entorno
Nest
Controladores
Nest
Servicios e inyección de dependencias
Nest
Módulos
Nest
TypeORM
Nest
Autenticación
Otras tecnologías
C
C
Backend
Lenguaje de propósito general, eficiente y de bajo nivel.
Rust
Rust
Backend
Lenguaje de programación de sistemas enfocado en seguridad, concurrencia y rendimiento.
R
R
Ciencia de Datos e IA
Lenguaje para análisis estadístico, manipulación de datos y visualización gráfica.
TypeScript
TypeScript
Full Stack
Superconjunto de JavaScript con tipado estático.
Go
Go
Backend
Lenguaje de programación eficiente y concurrente creado por Google.
Hibernate
Hibernate
Backend
ORM para Java, simplifica el acceso a bases de datos.
Django
Django
Backend
Framework web Python para desarrollo rápido y seguro.
PySpark
PySpark
Big Data
Motor unificado de análisis de datos distribuido para grandes volúmenes.
Java
Java
Backend
Lenguaje de programación versátil y multiplataforma.
Node
Node
Backend
Node.js es un entorno de ejecución de JavaScript basado en el motor V8 de Google.
OpenCV
OpenCV
Ciencia de Datos e IA
Biblioteca de Python para Computer Vision en imágenes y vídeos.
Selenium
Selenium
Testing / QA
Suite de herramientas open-source para automatizar navegadores web y pruebas de software de interfaz de usuario.
React
React
Frontend
Librería framework para frontend interfaces de usuario.
Vuejs
Vuejs
Frontend
Framework de JS progresivo para construir interfaces de usuario reactivas y modulares.
Docker
Docker
DevOps
Plataforma de contenedores para aplicaciones portátiles.
PHP
PHP
Backend
Lenguaje de programación para desarrollo web del lado del servidor, el motor del ecosistema Wordpress.
CSharp
CSharp
Backend
Lenguaje C# de Microsoft para desarrollo en el ecosistema .NET para todo tipo de aplicaciones.
Express
Express
Backend
Framework web minimalista para Node.js.
Streamlit
Streamlit
Ciencia de Datos e IA
Biblioteca Python para prototipado web UI rápido en ciencia de datos.
Seaborn
Seaborn
Ciencia de Datos e IA
Biblioteca de visualización de datos para Python.
FastAPI
FastAPI
Backend
Framework web moderno y rápido para Python.
Fundamentos
Fundamentos
Full Stack
Fundamentos y bases de la programación de software moderna.
SQL
SQL
Bases de datos
Lenguaje para gestionar bases de datos relacionales.
TensorFlow
TensorFlow
Ciencia de Datos e IA
Biblioteca Python para redes neuronales en Deep Learning
TailwindCSS
TailwindCSS
Frontend
Framework de utilidades CSS para diseños rápidos y personalizables.
Flask
Flask
Backend
Microframework web para Python, simple y flexible.
Git
Git
DevOps
Sistema de control de versiones distribuido.
ScikitLearn
ScikitLearn
Ciencia de Datos e IA
Biblioteca de aprendizaje automático en Python.
Laravel
Laravel
Backend
Framework de PHP para desarrollo web backend.
Kotlin
Kotlin
Backend
Lenguaje de programación moderno y seguro para aplicaciones Android.
Numpy
Numpy
Ciencia de Datos e IA
Biblioteca Python para computación científica y matrices.
HTML
HTML
Frontend
Lenguaje de marcado para estructurar contenido web.
SpringBoot
SpringBoot
Backend
Framework para desarrollo rápido de aplicaciones Java.
Bash
Bash
Administración de sistemas
Intérprete de comandos para sistemas Unix y Linux.
Matplotlib
Matplotlib
Ciencia de Datos e IA
Biblioteca Python para crear gráficos y visualizaciones.
Bootstrap
Bootstrap
Frontend
Framework CSS para diseños web responsive y modernos.
JavaScript
JavaScript
Full Stack
Lenguaje de scripting para desarrollo web interactivo.
Pandas
Pandas
Ciencia de Datos e IA
Herramienta Python para análisis y manipulación de datos.
Angular
Angular
Frontend
Framework web de Google para aplicaciones dinámicas.
CSS
CSS
Frontend
Lenguaje de estilo para diseñar páginas web atractivas.
Python
Python
Backend
Lenguaje de programación fácil de aprender y versátil.