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.

NestJS 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.
Certifícate en Nest con CertiDevs PLUS

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.