代码之家  ›  专栏  ›  技术社区  ›  yavg

如何在mongoose模式中自定义验证错误的输出?

  •  0
  • yavg  · 技术社区  · 6 年前

    enter image description here

    我在 err 财产。在这种情况下 documento 属性和 correo 属性不是唯一的。 err.message

    { . . “message”:“documento debe ser unico\n correo debe ser unico\n” }

    这是我的完整代码:

        const mongoose = require('mongoose');
        const uniqueValidator = require('mongoose-unique-validator');
    
        let Schema = mongoose.Schema;
    
        let usuarioSchema = new Schema({
            nombres: {
                type: String,
            },
            documento: {
                type: String,
                unique: true,
                required: [true, 'documento debe ser único']
            },
            correo: {
                type: String,
                unique: true,
                required: [true, 'Correo  debe ser único']
            },
            ultimo_inicio_sesion: {
                type: Date,
                default: null
            },
            contrasena: {
                type: String,
                required: [true, 'Contraseña es necesario']
            },
            rol:
            {
                type: String
            }
    
        })
    
    
        usuarioSchema.methods.toJSON = function () {
    
            let user = this;
            let userObject = user.toObject();
    
            return userObject;
        }
    
    
        usuarioSchema.plugin(uniqueValidator, { message: '{PATH} debe de ser único' });
    
        module.exports = mongoose.model('usuarios_', usuarioSchema);
    

    你怎么能做到?

    我需要这样的输出:

    enter image description here

    0 回复  |  直到 6 年前
        1
  •  0
  •   Constantine    6 年前

    在错误中,您可以根据mongodb返回的错误代码检查惟一值(代码11000)。

    if(code === 11000) {
      return "Value already exists"
    }
    

    error for unique value .

        2
  •  0
  •   AndrewShmig    6 年前

    那怎么办 custom validators

    代码示例:

    var userSchema = new Schema({
      phone: {
        type: String,
        validate: {
          validator: function(v) {
            return /\d{3}-\d{3}-\d{4}/.test(v);
          },
          message: props => `${props.value} is not a valid phone number!`
        },
        required: [true, 'User phone number required']
      }
    });
    

    在哪里? message

        3
  •  0
  •   eol    6 年前

    我知道这是不可能的,但是作为一个简单的解决方法,你可以在 errors

    const validationResult = {
      message: 'Usuario validation failed: documento: documento debe de ser unico, correo: correo debe de ser unico',
      name: 'ValidationError',
      errors: {
        documento: {
          message: 'documento debe de ser unico',
          name: 'ValidatorError',
        },
        correo: {
          message: 'correo debe de ser unico',
          name: 'ValidatorError',
        },
      },
    };
    
    
    function buildErrorMessage(validationResult) {
      const errorMessages = [];
      for (const error in validationResult.errors) {
        if (Object.prototype.hasOwnProperty.call(validationResult.errors, error)) {
            errorMessages.push(validationResult.errors[error].message);
        }
      }
      return errorMessages.join('\n');
    }
    
    
    console.log(buildErrorMessage(validationResult))