Implementar validación de modelo

Clase 21 de 38Curso de Desarrollo de APIs con Sails.js

Resumen

¿Por qué es importante validar el input de los usuarios?

La validación de los campos es un paso crítico en cualquier aplicación web. A la hora de gestionar inputs de usuarios, debemos asegurar que los datos sean válidos y cumplan con los parámetros establecidos por el sistema. Por ejemplo, al registrar un usuario, podríamos recibir un email mal formateado como "LaLitoenlugar@delCorreo.com", que no debería ser aceptado. Además, es crucial validar campos como contraseñas, para mantener la seguridad y funcionalidad del sistema.

¿Qué herramientas podemos usar para la validación en Node.js?

Node.js ofrece varias librerías para la validación de datos, siendo Joi una de las más populares. Esta librería facilita la validación con funciones sencillas, evitando errores comunes y permitiendo que el código sea más mantenible y seguro.

Para comenzar a usar Joi en tu proyecto, primero debes instalarla utilizando el siguiente comando en la terminal:

npm install @hapi/joi

Implementación básica de Joi

Al implementar Joi, se debe realizar una estructura de validación clara y precisa. Comienza por incluir la librería en tu archivo de controladores, por ejemplo, en el controlador del usuario:

const Joi = require('@hapi/joi');

try {
  const schema = Joi.object({
    email: Joi.string().email().required(),
    password: Joi.string().required(),
  });

  await schema.validateAsync(req.body);
  // Continúa con el procesamiento si es válido
} catch (err) {
  // Manejo de error
  if (err.isJoi) {
    res.status(400).send(err.details);
  } else {
    res.status(500).send('Error en el servidor');
  }
}

¿Cómo es el manejo de errores con Joi?

El manejo de errores en Joi es sencillo y efectivo. Si una validación falla, Joi arroja un error que puede ser capturado y tratado adecuadamente. Esto se realiza generalmente usando un bloque try-catch:

  1. Bloque try: Aquí es donde intentamos validar los datos usando Joi.
  2. Bloque catch: Captura los errores de validación. Puedes verificar si el error proviene de Joi usando err.isJoi, lo cual te permitirá diferenciarlo de otros errores de ejecución o del entorno.

Ejemplo práctico de validación y manejo de errores

Vamos a ver un ejemplo más detallado en Node.js. Suponiendo que estamos validando un registro de usuario:

router.post('/signup', async (req, res) => {
  const schema = Joi.object({
    email: Joi.string().email().required(),
    password: Joi.string().min(6).required(),
  });

  try {
    const value = await schema.validateAsync(req.body);
    // Si llega a este punto, todo es válido y procedemos al registro
    res.status(200).send('Usuario registrado exitosamente');
  } catch (err) {
    if (err.isJoi) {
      res.status(400).send({ message: err.details[0].message });
    } else {
      res.status(500).send('Error en el servidor');
    }
  }
});

En este ejemplo, estamos validando que el email sea un correo electrónico válido y que la contraseña contenga al menos seis caracteres. En caso de error, respondemos con un mensaje apropiado al usuario.

Conclusión

El uso de librerías como Joi facilita el trabajo de validación en las aplicaciones web. Al proveer métodos claros y sencillos para verificar inputs y manejar errores, podemos mantener nuestros sistemas seguros y confiables, reduciendo el riesgo de errores y aumentamos la facilidad de mantenimiento. Con esta técnica, no solo protegemos nuestros datos, sino que también mejoramos la experiencia del usuario. Sigue explorando y aplicando estas prácticas para perfeccionar tus habilidades en el desarrollo backend en Node.js.