Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

751
Vistas
Error de validación personalizado usando Sequelize.js

Es posible personalizar el error desde el

Sequelize.ValidationError

Modelo:

 var PaymentType = sequelize.define('payment_type' , { id: { type: DataTypes.INTEGER(11), allowNull: false, primaryKey: true, autoIncrement: true, field: 'id' }, code: { type: DataTypes.STRING, allowNull: false, validate:{ notEmpty: true }, field: 'code' }, name: { type: DataTypes.STRING, allowNull: false, validate:{ notEmpty: true }, field: 'name' } }, { timestamps: true, paranoid: false, underscored: true, freezeTableName: true, tableName: 'payment_types' });

Mi controlador:

 update(req, res) { paymentType .update(req.body, { where: { id: req.params.id } }) .then( updatedRecords => { res.status(200).json(updatedRecords); }) .catch(Sequelize.ValidationError, error => { res.status(400).json(error); }) .catch( error => { res.status(500).json(error); }); },

Los errores que obtengo, son de esta manera:

 { "name": "SequelizeValidationError", "message": "Validation error: Validation notEmpty failed", "errors": [ { "message": "Validation notEmpty failed", "type": "Validation error", "path": "name", "value": {}, "__raw": {} } ] }

Quiero pasar los errores como este (solo ruta y mensaje):

 { "name":"The field cannot be empty", "other_field":"custom error message" }

No sé si puedo especificar un mensaje personalizado en el modelo o si tengo que crear una función para generar los mensajes de error.

Si tengo que construir una función, ¿cómo puedo extraer la ruta y personalizar el mensaje?

Gracias de antemano.

over 4 years ago · Santiago Trujillo
3 Respuestas
Responde la pregunta

0

Puede especificar un mensaje personalizado para la continuación de la Validación. Su código se verá así

 `var PaymentType = sequelize.define('payment_type' , { id: { type: DataTypes.INTEGER(11), allowNull: false, primaryKey: true, autoIncrement: true, field: 'id' }, code: { type: DataTypes.STRING, allowNull: false, validate:{ notEmpty: { args: true, msg: “code cannot be empty" } }, field: 'code' }, name: { type: DataTypes.STRING, allowNull: false, validate:{ notEmpty: { args: true, msg: “code cannot be empty" } }, field: 'name' }

Especifiqué la regla de validación como un objeto, en el caso anterior, notEmpty debería ser verdadero, así que lo refactoricé a un objeto estableciendo la propiedad args en true , es decir, notEmpty debería ser true , y la segunda propiedad es msg , que contiene nuestro mensaje personalizado.

notEmpty: { args: true, msg: “code cannot be empty" }

over 4 years ago · Santiago Trujillo Denunciar

0

Puede capturar el ValidationError de Sequelize y recorrer sus ValidationErrorItem y escribir un mensaje personalizado según el tipo de error (determinado por ValidationErrorItem.validatorKey ). Aquí hay un fragmento de código para comenzar.

 try { // sequelize custom logic here } catch(e) { const messages = {}; if (e instanceof ValidationError) { e.errors.forEach((error) => { let message; switch (error.validatorKey) { case 'isEmail': message = 'Please enter a valid email'; break; case 'isDate': message = 'Please enter a valid date'; break; case 'len': if (error.validatorArgs[0] === error.validatorArgs[1]) { message = 'Use ' + error.validatorArgs[0] + ' characters'; } else { message = 'Use between ' + error.validatorArgs[0] + ' and ' + error.validatorArgs[1] + ' characters'; } break; case 'min': message = 'Use a number greater or equal to ' + error.validatorArgs[0]; break; case 'max': message = 'Use a number less or equal to ' + error.validatorArgs[0]; break; case 'isInt': message = 'Please use an integer number'; break; case 'is_null': message = 'Please complete this field'; break; case 'not_unique': message = error.value + ' is taken. Please choose another one'; error.path = error.path.replace("_UNIQUE", ""); } messages[error.path] = message; }); } }
over 4 years ago · Santiago Trujillo Denunciar

0

¿Intentas cambiar el modelo de esta manera:

 var PaymentType = sequelize.define('payment_type' , { id: { type: DataTypes.INTEGER(11), allowNull: false, primaryKey: true, autoIncrement: true, field: 'id' }, code: { type: DataTypes.STRING, allowNull: false, validate:{ notEmpty: { msg: "The field cannot be empty" } }, field: 'code' }, name: { type: DataTypes.STRING, allowNull: false, validate:{ notEmpty: { msg: "The field cannot be empty" } }, field: 'name' } }, { timestamps: true, paranoid: false, underscored: true, freezeTableName: true, tableName: 'payment_types' });

Referencia a esta publicación

over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda