Manejo de Errores
En el capítulo anterior, aprendiste cómo mutar datos usando Acciones del Servidor (Server Actions). Veamos ahora cómo puedes manejar errores de forma elegante usando sentencias try/catch
de JavaScript y las APIs de Next.js para excepciones no capturadas.
Añadiendo try/catch
a las Acciones del Servidor
Primero, añadamos las sentencias try/catch
de JavaScript a tus Acciones del Servidor para permitirte manejar errores de forma elegante.
Si sabes cómo hacer esto, tómate unos minutos para actualizar tus Acciones del Servidor, o puedes copiar el siguiente código:
Observa cómo redirect
se llama fuera del bloque try/catch
. Esto se debe a que redirect
funciona lanzando un error, que sería capturado por el bloque catch
. Para evitar esto, puedes llamar a redirect
después de try/catch
. redirect
solo sería accesible si try
tiene éxito.
Estamos manejando estos errores de forma elegante capturando el problema de la base de datos y devolviendo un mensaje útil desde nuestra Acción del Servidor.
¿Qué sucede si hay una excepción no capturada en tu acción? Podemos simular esto lanzando un error manualmente. Por ejemplo, en la acción deleteInvoice
, lanza un error al inicio de la función:
Cuando intentes eliminar una factura, deberías ver el error en localhost. Al pasar a producción, querrás mostrar un mensaje más elegante al usuario cuando ocurra algo inesperado.
Aquí es donde entra el archivo error.tsx
de Next.js. Asegúrate de eliminar este error añadido manualmente después de probar y antes de pasar a la siguiente sección.
Manejando todos los errores con error.tsx
El archivo error.tsx
se puede usar para definir un límite de UI para un segmento de ruta. Sirve como un capturador global para errores inesperados y te permite mostrar una UI de respaldo a tus usuarios.
Dentro de tu carpeta /dashboard/invoices
, crea un nuevo archivo llamado error.tsx
y pega el siguiente código:
Hay algunas cosas que notarás sobre el código anterior:
- "use client" -
error.tsx
debe ser un Componente de Cliente. - Acepta dos props:
error
: Este objeto es una instancia del objeto nativoError
de JavaScript.reset
: Esta es una función para reiniciar el límite de error. Cuando se ejecuta, la función intentará re-renderizar el segmento de ruta.
Cuando intentes eliminar una factura nuevamente, deberías ver la siguiente UI:

Manejo de errores 404 con la función notFound
Otra forma de manejar errores de forma elegante es usando la función notFound
. Mientras que error.tsx
es útil para capturar excepciones no capturadas, notFound
se puede usar cuando intentas obtener un recurso que no existe.
Por ejemplo, visita http://localhost:3000/dashboard/invoices/2e94d1ed-d220-449f-9f11-f0bbceed9645/edit.
Este es un UUID falso que no existe en tu base de datos.
Inmediatamente verás que error.tsx
entra en acción porque esta es una ruta hija de /invoices
donde error.tsx
está definido.
Sin embargo, si quieres ser más específico, puedes mostrar un error 404 para indicar al usuario que el recurso que intenta acceder no se ha encontrado.
Puedes confirmar que el recurso no se ha encontrado yendo a tu función fetchInvoiceById
en data.ts
, y registrando en consola la invoice
devuelta:
Ahora que sabes que la factura no existe en tu base de datos, usemos notFound
para manejarlo. Navega a /dashboard/invoices/[id]/edit/page.tsx
, e importa { notFound }
desde 'next/navigation'
.
Luego, puedes usar un condicional para invocar notFound
si la factura no existe:
Luego, para mostrar la UI de error al usuario, crea un archivo not-found.tsx
dentro de la carpeta /edit
.

Dentro del archivo not-found.tsx
, pega el siguiente código:
Actualiza la ruta, y ahora deberías ver la siguiente UI:

Esto es algo a tener en cuenta, notFound
tendrá precedencia sobre error.tsx
, por lo que puedes recurrir a él cuando quieras manejar errores más específicos.
Lectura adicional
Para aprender más sobre el manejo de errores en Next.js, consulta la siguiente documentación: