Неявные асинхронные пользовательские валидаторы (пользовательские валидаторы, которые принимают 2 аргумента) устарели в mongoose >= 4.9.0

Я использую мангуст 4.9.0. Хотя приведенный ниже код работает, я получаю предупреждение, подобное следующему:

(узел:24769) DeprecationWarning: Неявные асинхронные пользовательские валидаторы (пользовательские валидаторы, которые принимают 2 аргумента) устарели в mongoose >= 4.9.0. См. http://mongoosejs.com/docs/validation.html для получения дополнительной информации.

Я подозреваю, что ошибка исходит от валидаторов модели.

const mongoose = require('mongoose');
const isEmail = require('validator/lib/isEmail');

const Schema = mongoose.Schema;

const userSchema = new Schema({
  email: {
    type: String,
    unique: true,
    required: true,
    validate: [{ validator: isEmail, msg: 'Invalid email.' }],
  },
});

module.exports = mongoose.model('User', userSchema);

Единственный пользовательский валидатор, который у меня есть isEmail от validator библиотека, в которой задано строковое значение, возвращает ли оно действительное или нет.

6 ответов

Решение

В вашем пользовательском валидаторе есть хитрая ошибка.

isEmail функция от validator Библиотека принимает 2 параметра, хотя второй является необязательным.

isEmail(str [, options])

Вы можете запретить mongoose видеть его, создав функцию поверх него:

validate: [{ validator: value => isEmail(value), msg: 'Invalid email.' }]

На основе документации mongoose вы можете удалить предупреждение, установив для атрибута isAsync валидатора значение false. Mongoose предполагает, что все функции, принимающие два параметра, являются асинхронными

validate: [{ isAsync:false, validator: isEmail, msg: 'Invalid email.' }]

http://mongoosejs.com/docs/validation.html

//add validator to user model schema 

var validator = require('validator');

validate:{
       validator: (value)=>{

         return validator.isEmail(value);  

       },

       message:'{VALUE} is not a valid Email'

  },
  var validator = require('validator');
   validate: {
        validator: (value) => validator.isEmail(value),
        message: "{VALUE} is not a valid email"
    }  

ПРОБЛЕМА

import validate from 'mongoose-validator'

[...]
    email: {
      type: String,
      validate: validate({
        validator: 'isEmail',
        message: 'is not valid',
      })
    }
[...]

РЕШЕНИЕ

import validate from 'mongoose-validator'

const isEmail = validate.validatorjs.isEmail

[...]
    email: {
      type: String,
      validate: {
        validator: value => isEmail(value),
        message: 'is not valid'
      }
    }
[...]

Просто сделайте копию для приведенных ниже кодов и будете работать без ошибок

email: {
    type: String,
    required : true,
    lowercase : true,
    unique:true,
    validate: { 
    validator:function validateEmail(email) {
    var re = /^(([^<>()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/;
    return re.test(email);
},   message: '{email} Invalid' 
     }
  }
Другие вопросы по тегам