Mongoose - validate email syntax
I have a mongoose schema for users (UserSchema) and I'd like to validate whether the email has the right syntax. The validation that I currently use is the following:
UserSchema.path('email').validate(function (email) {
return email.length
}, 'The e-mail field cannot be empty.')
However, this only checks if the field is empty or not, and not for the syntax.
Does something already exist that I could re-use or would I have to come up with my own method and call that inside the validate function?
Solution 1:
you could also use the match or the validate property for validation in the schema
example
var validateEmail = function(email) {
var re = /^\w+([\.-]?\w+)*@\w+([\.-]?\w+)*(\.\w{2,3})+$/;
return re.test(email)
};
var EmailSchema = new Schema({
email: {
type: String,
trim: true,
lowercase: true,
unique: true,
required: 'Email address is required',
validate: [validateEmail, 'Please fill a valid email address'],
match: [/^\w+([\.-]?\w+)*@\w+([\.-]?\w+)*(\.\w{2,3})+$/, 'Please fill a valid email address']
}
});
Solution 2:
I use validator for my input sanitation, and it can be used in a pretty cool way.
Install it, and then use it like so:
import { isEmail } from 'validator';
// ...
const EmailSchema = new Schema({
email: {
//... other setup
validate: [ isEmail, 'invalid email' ]
}
});
works a treat, and reads nicely.