A煤n no tienes acceso a esta clase

Crea una cuenta y contin煤a viendo este curso

Manejo de errores con Boom

18/25
Recursos

Aportes 24

Preguntas 9

Ordenar por:

驴Quieres ver m谩s aportes, preguntas y respuestas de la comunidad? Crea una cuenta o inicia sesi贸n.

Si quieren buscar la documentaci贸n de alguna librer铆a de una manera mas f谩cil solo escribe

npm docs <nombre de la libreria>

Ac谩 me abri贸 la doc de boom

npm docs boom

Boom va a la alza xD

Me cost贸 encontrarla pero aqu铆 tienen la documentaci贸n de boom.

De acuerdo a lo que he visto en los cursos de node hay que tener en cuenta que TODO puede fallar, es la raz贸n por la cual se trabaja tanto el tema de aprender a manejar y capturar errores, dado que por como funciona Node si un error no es capturado detendr谩 toda la aplicaci贸n.

As铆 implemente el error para la funci贸n de Update:

  async update(id, changes) {
    const index = this.products.findIndex(item => item.id === id);
    if (index === -1){
      throw boom.notFound("Product not found");
    }
    const product = this.products[index];
    if (product.isBlock){
      throw boom.conflict("Product is Block");
    }
    this.products[index] = {
      ...product,
      ...changes
    };
    return this.products[index];
  };

Comando para instalar la libreria de boom

npm i @hapi/boom   

Para los que usamos WSL, me empez贸 a dar un error de conexi贸n ya que no conectaba postman o insomnia con la API en su puerto. Tampoco pod铆a verla en navegador.

Lo resolv铆 ejecutando en la terminal PowerShell de windows:

 wsl --shutdown

Esto reinicia los servicios del WSL y pude terminar el proyecto.

cada clase de este curso es oro

Debido a que en clases pasadas se vio como manejar los m茅todos de los servicios con asincron铆a me top茅 con algunas cosas que quiero compartir.

B谩sicamente es que cuando el m茅todo regresa una promesa

return new Promise((resolve, reject) => {...});

el boom.notFound() va dentro de la funci贸n reject().

En caso de que el m茅todo no regrese una promesa, se puede hacer uso del throw y el return como se ve en la clase.

service.js

router.js

middleware.js

馃 En la documentaci贸n, aqu铆 encuentran todos los m茅todos para los errores:

npm i @hapi/boom

Me pase alrededor de 3 dias tratando de solucionar el error status code 404 que no me salia y lo estaba revisando en el update, y no en el patch (partial update) y ya tenia bien mi codigo, xD

este man sabe mucho

Libreria para el manejo de errores con boom

npm -i @hapi/boom

Me parece increible lo que se puede hacer con los middlewares y sobre todo con Boom, me parece que es una forma mas facil y profesional de manejar los errores

Excelente, ya podemos regresar los status

Mi aporte:

async findOne(id) {
    const product = this.products.find(item => item.id === id);
    if (!product) throw boom.notFound('product not found')
    if (product.isBlock) throw boom.conflict('product is block');
    return product;
  }

  async delete(id) {
    const index = this.products.findIndex(item => item.id === id)
    if(index === -1) throw boom.notFound("product not found")
    if (index.isBlock) throw boom.conflict('product is block');
    this.products.splice(index, 1)
    return {
      id: id,
      message: "Product delete success"
    }
  }

excelente la forma de atrapar erores con esta libreria

Un peque帽o consejo para todos, tengan cuidado donde ponen su funcion de routerApi(app) en el index principal debido a que si lo ponen mal les ocasionara problemas con el manejo de errores, lo descubr铆 a base de experiencia y 1 hora de busqueda de error :鈥)

Aunque el uso de throw es correcto para lanzar el error, aprovechando el uso de las promesas me gustaria mostrar una forma de simular error 500 cuando se pide la lista de productos:

services/product.services.js

  async find(correct = true){
    return new Promise((resolve, reject)=>{
      if(!correct) reject(boom.internal('error interno'))
      setTimeout(()=>{
        resolve(this.products)
      },5000)
    });
  }

routes/product.router.js

router.get('/',async (req, res, next)=>{
  try {
    const products = await services.find(false);
    res.json(products);
  } catch (error) {
    next(error)
  }
});

Boom es una chulada de libreria, antes de eso sobreescribia la clase Error nativa, para controlar y generar errores propios xD

Muy buena forma de capturar errores con Boom no sabia acerca de esta libreria