Input Data validator
Existen varias herramientas para validar los datos de entrada, sin embargo, cuando se trabaja con un ORM como Sequelize se definen modelos cuyos atributos tienen un tipo de dato definido y en algunos casos un validador, sería interesante poder reutilizar estos atributos evitando de esa forma una doble implementación.
Input Data Validator es un validador que crea esquemas de validación utilizando objetos de tipo FieldGroup
los cuales se crean con la librería field-creator
. Esta librería crea estos objetos a partir de modelos Sequelize, por lo que solamente será necesario incluir los validadores dentro de los modelos.
Características
- Crea un middleware para validar los datos de entrada, utilizando objetos de tipo
FieldGroup
. - Es posible indicar si se eliminarán los datos de entrada que no hayan sido definidos en el esquema de validación. Por defecto se eliminan en el caso del body.
Esquema de validación
Un esquema de validación, es un objeto que tiene las propiedades headers
, params
, query
y body
, los cuales son objetos de tipo FieldGroup
.
const INPUT = headers : Field params : Field query : Field body : Field
Para crear el objeto input
, se recomienda utilizar la librería field-creator.
Middleware de validación
const Validator = const app = const LIBRO = sequelize const INPUT = body: Field const inputOptions = remove: 'body' app // Para capturar los errores de validación.app app
ValidationError
Formato del objeto Propiedad | Descripción |
---|---|
name |
Nombre del error. |
errors |
Lista de errores. |
errors.path |
Ruta del campo. |
errors.value |
Valor actual del campo. |
errors.msg |
Mensaje de error. |
Instalación
Para instalar sobre un proyecto, ejecutar el siguiente comando:
$ npm install --save input-data-validator
Ejemplo
const Validator =const Field THIS =const express =const LIBRO = sequelizeconst INPUT =body: Fieldconst app =appappapp
Resultado con datos válidos.
curl -H "Content-Type: application/json" -X POST -d '{ "id": 123, "titulo": "El cuervo", "precio": 11.99 }' http://localhost:4000/libros
Resultado con datos inválidos.
curl -H "Content-Type: application/json" -X POST -d '{ "precio": -124 }' http://localhost:4000/libros