Aún no tienes acceso a esta clase

Crea una cuenta y continúa viendo este curso

Validación de datos con Joi

19/25
Recursos

Aportes 21

Preguntas 7

Ordenar por:

¿Quieres ver más aportes, preguntas y respuestas de la comunidad? Crea una cuenta o inicia sesión.

Recuerda

npm docs joi

Si quieres ver la documentacion

Este curso es genial, en otros validamos datos con Joi sin entender bien como funcionaba.

–No hay error.
El middleware: Fresco, tranquilo, siga 😎

🤣🤣🤣😁

Schema o DTO (Data Transfer objects), (objetos de Transferencia de datos)

  • Validar los datos que nos envían desde el cliente

Joi

Joi es la herramienta más poderosa para la validación de datos en JavaScript. Este módulo permite crear esquemas de datos usando un lenguaje simple, comprensible e intuitivo.

A la hora de interactuar con una API, es muy importante que se validen los datos tanto en el lado del servidor como en el del cliente para tener controlados posibles errores y la forma en la que se interactúa con la base de datos.

Anteriormente Joi pertenecía al ecosistema de Hapi, un framework para crear aplicaciones en Node, pero a partir de la versión 12.1.0 decidió dejar de formar parte de este framework y ser un paquete totalmente independiente, lo cual facilita aún más la integración con este.

Integrar Joi en nuestro proyecto

Lo instalaremos como dependencia en el proyecto:

$ npm install --save joi
$ npm install --save-dev @types/joi

Fuente: https://duprez.medium.com/validación-con-joi-y-nestjs-f11cc32dbf4b

Comando para instalar la libreria

npm i joi

Ahhhhh… ¿cómo le hacen para recordar para cada cosa una librería?

Justo estaba buscando que era un DTO, Data Transfer Object, es un middleware para validar data entre otras cosas

Joi es muy bueno ya que podemos trabajar en base a esquemas con el objetivo de mantener el orden y simplicidad, por otro lado existe otra alternativa y es usar express-validator para las validaciones en los params, body y query de la peticion …
.
https://www.npmjs.com/package/express-validator
.
https://express-validator.github.io/docs/
.

Existe un DTO más simple que hapi/joi e incluso más liviano que es yup

productSchema.js

const Joi = require('joi');

const id = Joi.string().uuid();
const name = Joi.string().alphanum().min(3).max(20);
const price = Joi.number().integer().min(1);

const createProductSchema = Joi.object({
  name: name.required(),
  price: price.required(),
});

const updateProductSchema = Joi.object({
  name: name,
  price: price,
});

const getProductSchema = Joi.object({
  id: id.required(),
});

module.exports = { createProductSchema, updateProductSchema, getProductSchema}

Buen ejemplo caso práctico de dónde y cómo usar closures. No había encontrado una caso en dónde aplicarlos.

Perdon platzi, pero aprendi closures gracias al maestro de la cocina del codgo Sacha Lift. : https://youtu.be/JXG_gQ0OF74

Libreria para validar datos joi

npm -i joi

Para el eschema de eliminar un producto implemente que solo se valide el ID:

const deleteProductSchema = Joi.object({
  id: id.required(),
});

Ya quedo la lógica 😄

Una excelente alternativa es express-validator 😁

Aun no veo la clase pero estoy seguro que es la mejor de este curso. Vamos a darle, pa encima

Documentación: Joi

validator.handler.js (middleware):

const boom = require('@hapi/boom');

function validatorHandler(schema, property) {
  return (req, res, next) => {
    const data = req[property];
    const { error } = schema.validate(data);

    if (error) {
      next(boom.badRequest(error));
    }
    next();
  };
}

module.exports = validatorHandler;

Aquí se crea un middleware de forma dinámica (se usa closure).

Si se recibe el schema, con schema.validate() se valida la información que se desea validar. La información viene de data, la cual viene de un request (body, params, query).

Si hay un error (no cumple con la validación), entonces se envía un error de tipo boom. Si no hay error, el servicio sigue (next()).