• Empleos
  • Sobre nosotros
  • Empleos
    • Inicio
    • Empleos
    • Cursos y retos
  • Empresas
    • Inicio
    • Publicar vacante
    • Nuestro proceso
    • Precios
    • Evaluaciones
    • Nómina
    • Blog
    • Comercial
    • Calculadora de salario

0

564
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 3 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 3 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 3 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 3 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 Nuestro proceso Comercial
Legal
Términos y condiciones Política de privacidad
© 2025 PeakU Inc. All Rights Reserved.

Andres GPT

Recomiéndame algunas ofertas
Necesito ayuda