39. Exception Filters

 

Exception Filters en NestJS: Manejo Elegante de Errores

En el desarrollo de APIs, manejar errores de manera adecuada es crucial para brindar una buena experiencia al cliente. NestJS simplifica este proceso con los Exception Filters, permitiéndonos transformar errores de código en respuestas HTTP claras y descriptivas.

¿Qué son los Exception Filters?

Los Exception Filters en NestJS se encargan de capturar excepciones y convertirlas en respuestas HTTP estructuradas. Aunque Nest ya incluye excepciones comunes, podemos personalizarlas según nuestras necesidades.

Excepciones más comunes

  • BadRequestException (400): Solicitud incorrecta.

  • UnauthorizedException (401): Falta de autenticación.

  • NotFoundException (404): Recurso no encontrado.

  • ForbiddenException (403): Sin permisos suficientes.

  • RequestTimeoutException (408): Tiempo de espera agotado.

  • GoneException (410): Recurso ya no disponible.

  • PayloadTooLargeException (413): Datos demasiado grandes.

  • InternalServerErrorException (500): Error interno del servidor.

Código del Controlador

typescript
Copy
Download
import { Controller, Get, Param, ParseIntPipe } from '@nestjs/common';
import { CarsService } from './cars.service';

@Controller('cars')
export class CarsController {
  constructor(private readonly carsService: CarsService) {}

  @Get()
  getAllCars() {
    return this.carsService.findAll(); // Usa el método del servicio
  }
@Get(':id') getCarById(@Param('id', ParseIntPipe) id: number) { return this.carsService.findOneById(id); }
 @Post()
  createCar(@Body() body: any) {
    return body;
  }

  @Patch(':id')
  updateCar(
    @Param('id', ParseIntPipe) id: number,
    @Body() body: any
  ) {
    return body;
  }

  @Delete(':id')
  deleteCar(@Param('id', ParseIntPipe) id: number) {
    return {
      method: 'delete',
      id
    };
  }

}

Ejemplo Práctico: Manejo de Errores en un Servicio

Imaginemos un servicio CarsService que busca autos por ID. Si el auto no existe, queremos devolver un error 404 (Not Found) con un mensaje claro.

Código Inicial (Sin Manejo de Errores)

typescript
Copy
Download
import { Injectable } from '@nestjs/common';

@Injectable()
export class CarsService {
  private cars = [
    { id: 1, brand: 'Toyota', model: 'Corolla' },
    { id: 2, brand: 'Honda', model: 'Civic' },
    { id: 3, brand: 'Jeep', model: 'Cherokee' },
  ];

  findOneById(id: number) {
    return this.cars.find(car => car.id === id);
  }
}

Si el cliente solicita un auto con un ID inexistente, recibirá null sin un mensaje claro.

Mejorando el Servicio con NotFoundException

typescript
Copy
Download
import { Injectable, NotFoundException } from '@nestjs/common';

@Injectable()
export class CarsService {
  private cars = [
    { id: 1, brand: 'Toyota', model: 'Corolla' },
    { id: 2, brand: 'Honda', model: 'Civic' },
    { id: 3, brand: 'Jeep', model: 'Cherokee' },
  ];

  findOneById(id: number) {
    const car = this.cars.find(car => car.id === id);
    if (!car) throw new NotFoundException(`Car with id ${id} not found`);
    return car;
  }
}

Ahora, si el auto no existe, el cliente recibirá:

json
Copy
Download
{
  "statusCode": 404,
  "message": "Car with id 5 not found"
}

¿Por qué Usar Exception Filters?

  • Centralización del manejo de errores: NestJS captura automáticamente las excepciones y las convierte en respuestas HTTP.

  • Código más limpio: Evita repetir try-catch en cada método.

  • Mensajes personalizados: Podemos mejorar la claridad para el cliente.

Conclusión

Los Exception Filters son una herramienta poderosa en NestJS para manejar errores de manera eficiente. Con solo lanzar una excepción integrada, Nest se encarga del resto, devolviendo respuestas HTTP bien estructuradas.

¿Quieres aprender más sobre NestJS? ¡Sigue nuestro blog para más tips y ejemplos prácticos! 🚀


¿Te gustó el post? Déjanos tus comentarios y comparte tus experiencias con el manejo de errores en NestJS. 🚀

Comentarios

Entradas más populares de este blog

48. ValidationPipe - Class Validator y Class Transformer

32-Modulos

49. Pipes Globales - A nivel de Aplicación