Saltar al contenido principal

Manejo de errores

En cualquier aplicación, pueden producirse errores por distintas razones: fallos en la lógica del código, errores en operaciones de entrada/salida, peticiones a APIs que fallan, o problemas de red. En Node.js, es fundamental manejar estos errores correctamente para evitar que la aplicación se detenga inesperadamente y para mantener un comportamiento predecible.

Al manejar errores en Node.js, se recomienda:

  • Siempre capturar errores en operaciones asíncronas para evitar que la aplicación se detenga.
  • Usar mensajes de error claros y descriptivos, que faciliten la depuración.
  • Diferenciar entre errores previsibles (como datos inválidos) y errores inesperados, tratando cada caso adecuadamente.
  • Mantener la lógica de manejo de errores separada de la lógica principal de negocio, para mejorar la legibilidad y mantenimiento del código.
  • En aplicaciones de servidor, enviar respuestas adecuadas al cliente cuando ocurre un error, evitando exponer detalles internos del sistema.

try...catch

La forma básica de capturar errores en JavaScript es mediante el bloque try...catch. El código dentro del bloque try se ejecuta normalmente, y si ocurre un error, la ejecución pasa al bloque catch, donde se puede manejar o registrar el error.

Ejemplo:

try {
const resultado = 10 / 0;
console.log(resultado);
} catch (error) {
console.error('Se produjo un error:', error.message);
}

En este ejemplo, aunque la operación 10 / 0 no lanza un error en JavaScript (devuelve Infinity), si se produjera cualquier otro error dentro del try, sería capturado en el bloque catch.

Manejo de errores en promesas

Cuando se trabaja con promesas, los errores no se capturan automáticamente con try...catch. En su lugar, se utiliza el método .catch() para manejar rechazos.

function obtenerDatos() {
return new Promise((resolve, reject) => {
const exito = false;
if (exito) {
resolve("Datos recibidos");
} else {
reject(new Error("Error al obtener datos"));
}
});
}

obtenerDatos()
.then(resultado => console.log(resultado))
.catch(error => console.error(error.message));

Manejo de errores con async/await

Cuando se utilizan funciones async/await, es posible combinar la sintaxis de promesas con try...catch para capturar errores de forma clara y legible.

async function procesarDatos() {
try {
const resultado = await obtenerDatos();
console.log(resultado);
} catch (error) {
console.error('Se produjo un error:', error.message);
}
}

procesarDatos();