Неявные асинхронные пользовательские валидаторы (пользовательские валидаторы, которые принимают 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.' }]
//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'
}
}