我使用的是mongoose 4.9.0。虽然下面的代码有效,但我收到如下警告:
(node:24769)DeprecationWarning:隐式异步自定义验证程序 (带有2个参数的自定义验证器)在mongoose> = 4.9.0中已弃用。有关详细信息,请参阅http://mongoosejs.com/docs/validation.html#async-custom-validators。
我怀疑错误来自模型验证器。
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);
我似乎唯一的自定义验证器是来自validator
库的isEmail
,它给出了一个字符串值,返回它是否有效。
答案 0 :(得分:10)
您的自定义验证程序中存在一个偷偷摸摸的错误。
来自isEmail
库的 validator
函数有2个参数,即使第二个参数完全是可选的。
isEmail(str [, options])
你可以通过在它上面创建一个函数来防止猫鼬看到它:
validate: [{ validator: value => isEmail(value), msg: 'Invalid email.' }]
答案 1 :(得分:4)
根据mongoose文档,您可以通过将验证程序的isAsync属性设置为false来删除警告。 Mongoose假设所有接受两个参数的函数都是异步的
validate: [{ isAsync:false, validator: isEmail, msg: 'Invalid email.' }]
http://mongoosejs.com/docs/validation.html#async-custom-validators
答案 2 :(得分:2)
//add validator to user model schema
var validator = require('validator');
validate:{
validator: (value)=>{
return validator.isEmail(value);
},
message:'{VALUE} is not a valid Email'
},
答案 3 :(得分:0)
只需复制以下代码即可正常运行
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'
}
}
答案 4 :(得分:0)
问题
settings.py
解
import validate from 'mongoose-validator'
[...]
email: {
type: String,
validate: validate({
validator: 'isEmail',
message: 'is not valid',
})
}
[...]
答案 5 :(得分:0)
var validator = require('validator');
validate: {
validator: (value) => validator.isEmail(value),
message: "{VALUE} is not a valid email"
}