Nest: Controladores
Aprende a implementar y configurar controladores en NestJS. Guía detallada sobre su uso, ejemplos prácticos y mejores prácticas en 2024.
Aprende Nest GRATIS y certifícateNestJS es un framework progresivo de Node.js para construir aplicaciones eficientes y escalables del lado del servidor. En esta guía, nos centraremos en los controladores, un componente esencial en cualquier aplicación NestJS.
¿Qué es un controlador en NestJS?
Un controlador en NestJS es responsable de manejar las solicitudes entrantes a la aplicación. Define los puntos finales (endpoints) y la lógica que se ejecutará cuando se realice una petición a esos puntos finales. Los controladores están decorados con el decorador @Controller
y contienen métodos que responden a las solicitudes HTTP.
Creación de un controlador básico
Para crear un controlador en NestJS, primero necesitas generar un módulo y un servicio. Puedes hacerlo utilizando el CLI de NestJS:
nest generate module users
nest generate controller users
nest generate service users
Esto generará los archivos necesarios en el directorio users
. El controlador básico tendrá el siguiente aspecto:
import { Controller, Get } from '@nestjs/common';
import { UsersService } from './users.service';
@Controller('users')
export class UsersController {
constructor(private readonly usersService: UsersService) {}
@Get()
findAll(): string {
return this.usersService.findAll();
}
}
En este ejemplo, el controlador UsersController
maneja las solicitudes GET a la ruta /users
.
Decoradores en controladores
NestJS utiliza decoradores para definir rutas y métodos HTTP. Los decoradores más comunes son:
@Get()
: Maneja solicitudes HTTP GET.@Post()
: Maneja solicitudes HTTP POST.@Put()
: Maneja solicitudes HTTP PUT.@Delete()
: Maneja solicitudes HTTP DELETE.
Ejemplo de uso de decoradores
import { Controller, Get, Post, Body } from '@nestjs/common';
import { UsersService } from './users.service';
import { CreateUserDto } from './dto/create-user.dto';
@Controller('users')
export class UsersController {
constructor(private readonly usersService: UsersService) {}
@Get()
findAll() {
return this.usersService.findAll();
}
@Post()
create(@Body() createUserDto: CreateUserDto) {
return this.usersService.create(createUserDto);
}
}
En este ejemplo, el método create
maneja las solicitudes POST a la ruta /users
y espera un cuerpo de solicitud que se mapea a un objeto CreateUserDto
.
Inyección de dependencias
NestJS utiliza la inyección de dependencias para gestionar las dependencias entre clases. En el ejemplo anterior, el servicio UsersService
se inyecta en el controlador UsersController
a través del constructor.
Controladores anidados
NestJS permite anidar controladores para organizar mejor las rutas. Esto se logra utilizando submódulos y subcontroladores.
Ejemplo de controlador anidado
import { Controller, Get } from '@nestjs/common';
import { OrdersService } from './orders.service';
@Controller('users/:userId/orders')
export class OrdersController {
constructor(private readonly ordersService: OrdersService) {}
@Get()
findAll(@Param('userId') userId: string) {
return this.ordersService.findAllByUser(userId);
}
}
En este caso, el controlador OrdersController
maneja las solicitudes GET a la ruta /users/:userId/orders
.
Mejores prácticas
- Organización de código: Mantén los controladores delgados y delega la lógica de negocio a los servicios.
- Validación: Utiliza DTOs y pipes para validar y transformar los datos de las solicitudes.
- Documentación: Documenta tus controladores y rutas utilizando Swagger u otras herramientas similares.
Lecciones de este módulo de Nest
Lecciones de programación del módulo Controladores del curso de Nest.
Ejercicios de programación en este módulo de Nest
Evalúa tus conocimientos en Controladores con ejercicios de programación Controladores de tipo Test, Puzzle, Código y Proyecto con VSCode.