Desde: 31-Mar-2023
Hasta 29-Ago-2023
Modo

Manejo de errores en Api Rest (11.ª parte)

Omar Giancarlo

Descripción Corta:

Aprende a manejar errores en tu aplicación con esta guía práctica sobre el manejo de errores utilizando Node.js y Express en esta Api Rest.

Anterior Siguiente

Hasta ahora hemos estado desarrollando controladores que interactúan con la base de datos. Aunque puede parecer que siempre funcionarán sin problemas, en realidad cada consulta depende de otro sistema y está sujeta a errores. Es por eso que es esencial tener un buen manejo de errores para garantizar que nuestro servidor siga funcionando correctamente incluso cuando ocurren problemas inesperados.

En esta situación, puede ser complicado saber cómo manejarlo. Como estamos utilizando Express, si algo falla en la ejecución del programa, puede terminar deteniendo nuestro servidor por completo.

Vamos a manejar este tipo de errores de una mejor forma, para esto de momento vamos al archivo de los controladores, employeescontrollers.js y vamos a manejar las peticiones o consultas a la base de datos de otra forma. Para poder entender todo esto primero vamos a hacer la petición incorrecta.

Vamos a ir a Thunder client y vamos a hacer una petición GET a: http://localhost:3000/api/employees y enviamos. Vemos una respuesta por parte del servidor que es una lista completa de empleados.

Esto es la forma correcta cómo debería de funcionar, pero que pasa si la base de datos deja de funcionar por algún motivo.

Quizás se fue el internet o quizás el servidor se cayó, y eso no está dentro de nuestro control.

Lanzando nuestros propios errores

Para poder entender esto mejor vamos a lanzar un error. En JavaScript, podemos crear nuestros propios errores.

throw new Error //Error lanzado intensionalmente

Para crearlos podemos utilizar un bloque de try catch, en el try coloco el código correcto y en el catch coloco el mensaje de error, ese error va a responder algo al cliente.

Por lo general siempre se envía un código 500, el cual no da mucha información, pero nosotros podemos enterarnos qué fue lo que pasó simplemente mirando los registros del servidor. 

Entonces, continuando con el manejo de errores, vamos a ver que si ocurre un error en el bloque catch vamos a responder con un estatus 500 y un mensaje en formato JSON con un texto que diga 'Error al obtener la información'.

El código quedaría de la siguiente manera:

const getEmployees = async (req, res) => {
  try {
    throw new Error //Error lanzado intensionalmente
    const rows = await query('SELECT * FROM employee')
    res.json(rows)
  } catch (error) {
    console.error(error)
    res.status(500).send('Error al obtener la información')
  }
}

Lo mismo vamos a ir haciendo con el resto de las rutas, para probar el error podemos ir a Thunder client hacer una petición GET a la ruta: http://localhost:3000/api/employees/ solicitando todos los empleados, vamos a ver qué nos va a lanzar el error estatus 500 con el mensaje 'Error al obtener la información', mientras que mantengamos ahí nuestro error.

Ruta no encontrada

En este punto, es importante considerar el manejo de errores. Hasta este momento hemos creado varias rutas utilizando el archivo de router que es Index.routes.js. Pero que pasa si queremos pedir algo que no existe, de momento tenemos un pequeño detalle. 

Por ejemplo, si ahora vamos a la extensión Thunder client y colocamos cualquier cosa, es decir, cualquier ruta http://localhost:3000/jkljsafdjljflj, a esta ruta le damos enviar y podemos ver que responde un html con el status 404 no encontrado. Esto está bien para el navegador, pero, para aplicaciones cliente, no es necesario que envíe un html. Vamos a cambiar ese tipo de mensaje 404. Para esto, cuando visite una ruta que no existe, simplemente voy a devolver un mensaje, a pesar de que el código 404 está bien. 

Para esto tenemos que ir a nuestra carpeta src y dirigirnos al archivo index.js donde se encuentra app, voy a indicar que una vez que pase por estas rutas:

app.use(indexRoutes)
app.use('/api', employeesRoutes)

Si no coincidió con ninguna, entonces significa que no encontró ninguna ruta. Para manejar esto vamos a colocar lo siguiente.

app.use((req, res, next) =>{
    res.status(404).json({
        message: 'Ruta NO encontrada'
    })
})

Esta es una función middleware, que envía una respuesta con el estatus 404 y un mensaje JSON que dice 'Ruta NO encontrada'. Entonces de esta forma, si una aplicación cliente busca una ruta que no existe, va a obtener este tipo de mensaje.

Para poder verlo vamos a ir a la extensión Thunder client y colocamos cualquier cosa, es decir cualquier ruta http://localhost:3000/jkljsafdjljflj y enviamos, vamos a ver que ahora obtenemos el mensaje de error 'Ruta NO encontrada'. Y si lo mismo hacemos desde el navegador, también vamos a obtener el mismo mensaje.

Ir a la parte 12

Anterior Siguiente