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
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)
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
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á:
{
"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-catchen 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
Publicar un comentario