Tengo una aplicación express / node js usando sequelize orm. Quiero saber cuál sería el mejor lugar en la aplicación para escribir la validación de las reglas comerciales. digamos que tengo una clase de modelo de usuario como se muestra a continuación. He agregado alguna validación de modelo a la clase (en negrita a continuación), por ejemplo, el nombre no puede estar vacío. Aparte de la validación del modelo, ¿dónde puedo agregar alguna validación de reglas comerciales? Por ejemplo, si la edad es menor de 18 o 16 años, no puede tener un nombre de empleador o horas de trabajo por semana (esto es solo para este ejemplo). Se ideó un ejemplo para esta pregunta.

¿Hay alguna manera de agregar tales reglas a la clase modelo? Si ahora, ¿cómo agrego eso a la clase contorller a continuación?

Clase de modelo de usuario

const User = sequelize.define(
  'User',
  {
    id: {
      type: DataTypes.BIGINT,
      allowNull: false,
      primaryKey: true,
      autoIncrement: true,
      field: 'id'
    },
    Name: { 
        type: DataTypes.STRING,  
        allowNull: false,
        **validate: {
          notEmpty: true
        }**
     },
    age: {
    }, 
    hoursWorkedPerWeek: {
    }, 
    employerName: {
    }, 
    createdAt: {
     
    },
    updatedAt: {
    
    }
  }
  ....
);

Clase de controlador

static async add(user) {
      try {
             models.User.create(user).then(newUser => {
                 //do something
        }).catch(error => {
          throw error;
        }); 
    
      } catch (error) { 
          throw error;
      }
    }

0
ozil 22 ene. 2021 a las 21:36

1 respuesta

La mejor respuesta

Dentro de la documentación, parece que puede pasar reglas de validación dentro de la definición del modelo: https://sequelize.org/master/manual/validations-and-constraints.html#per-attribute-validations. Tenga en cuenta los validadores personalizados que puede hacer al final.

Si tiene mucha validación en curso, podría ser beneficioso ponerlo en un archivo y hacer referencia según sea necesario a lo largo de su proyecto.

Editar: actualice para mostrar el ejemplo. Solo como aviso, no he implementado esto, pero de la documentación parece seguir.

// validations.js

exports.ageValidator = value => {
    if(value < 18) {
        throw new Error("Invalid age.");
    }
}

// list other validators as needed here in the same manner

Luego puede importar esto a la clase donde está su modelo y agregarlo dentro del bloque de validación.

// within your User model
const validateModule = require(/* path to validations.js */);
const ageValidator = validateModule.ageValidator;

/*
    Add ageValidator to the `validate` section

    age:{
        validate: {
            customValidate(value) {
                ageValidator(value);
            }
        }
    }


1
GenericUser 22 ene. 2021 a las 19:24