Reputation: 32777
I'm using mongoose 4.9.0. Whilst the code below works, I get a warning like the following:
(node:24769) DeprecationWarning: Implicit async custom validators (custom validators that take 2 arguments) are deprecated in mongoose >= 4.9.0. See http://mongoosejs.com/docs/validation.html#async-custom-validators for more info.
I suspect the error is coming from the model 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);
The only custom validator I seem to have is isEmail
from the validator
library, which given an string value returns whether it is valid or not.
Upvotes: 5
Views: 4355
Reputation: 71
var validator = require('validator');
validate: {
validator: (value) => validator.isEmail(value),
message: "{VALUE} is not a valid email"
}
Upvotes: 0
Reputation: 41
Based on the mongoose Documentation you can remove the warning by setting the isAsync attribute of the validator to false. Mongoose assumes that all functions that take in two parameters are asynchronous
validate: [{ isAsync:false, validator: isEmail, msg: 'Invalid email.' }]
http://mongoosejs.com/docs/validation.html#async-custom-validators
Upvotes: 4
Reputation: 32777
There's a sneaky mistake in your custom validator.
isEmail
function from the validator
library takes 2 parameters, even though the second one is completely optional.
isEmail(str [, options])
You can prevent mongoose from seeing it by creating a function on top of it:
validate: [{ validator: value => isEmail(value), msg: 'Invalid email.' }]
Upvotes: 10
Reputation: 33
PROBLEM
import validate from 'mongoose-validator'
[...]
email: {
type: String,
validate: validate({
validator: 'isEmail',
message: 'is not valid',
})
}
[...]
SOLUTION
import validate from 'mongoose-validator'
const isEmail = validate.validatorjs.isEmail
[...]
email: {
type: String,
validate: {
validator: value => isEmail(value),
message: 'is not valid'
}
}
[...]
Upvotes: 0
Reputation: 21
Just make copy for the below codes and will work without any errors
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'
}
}
Upvotes: 0
Reputation: 4189
//add validator to user model schema
var validator = require('validator');
validate:{
validator: (value)=>{
return validator.isEmail(value);
},
message:'{VALUE} is not a valid Email'
},
Upvotes: 2