简体   繁体   English

如何根据特定条件在猫鼬验证中创建错误数组?

[英]how to create array of errors in mongoose validation based on certain conditions?

i'm trying to generate array of errors based on certain conditions , how can i achieve that , postman arrises this : "Cannot read properties of undefined (reading 'push')"我正在尝试根据某些条件生成错误数组,我该如何实现,邮递员提出:“无法读取未定义的属性(读取'推送')”

  username: {
    type: String,
    required: [true, "username is required"],
    // minlength: 6,
    unique: true,
    // match: [
    //   /^(?=.{3,20}$)(?![_.])(?!.*[_.]{2})[a-zA-Z0-9._]+(?<![_.])$/,
    //   "username shouldn't include . or _ and at least 3 letters and at maximum 20 letters",
    // ],
    validate: {
      errors: [],
      validator: function (username) {
        if (username.length < 10) {
          this.errors.push("username cannot be less than 3 characters");
        }
        if (username.match(/(?![_.])(?!.*[_.]{2})[a-zA-Z0-9._]+(?<![_.])$/)) {
          this.errors.push(`username shouldn't begin or end with . or _ `);
        }
      },
      message: this.errors,
    },
  },

Create an array in the validator function and throw this array as new Error() .validator函数中创建一个array ,并将这个数组作为new Error() throw Then use this array in the callback of the save() function.然后在save()函数的回调中使用这个数组。

validate

validate: {
        validator: function (username) {
            let errors = []
            if (username.length < 3)
                errors.push("username cannot be less than 3 characters")

            if (username.match(/(?![_.])(?!.*[_.]{2})[a-zA-Z0-9._]+(?<![_.])$/))
                errors.push("username shouldn't begin or end with . or _ ")

            if (errors.length > 0)
                throw new Error(errors)
        }
    }

save

newUser.save((err, user) => {
    if (err) {
        let errors = Object.values(err.errors)[0].properties.message.split(',')
        return res.status(400).json({
            success: false,
            err: errors.length > 1 ? errors : errors[0]
        })
    }
    else ...
})

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM