mongoose – validation电子邮件语法

我有一个mongoose用户架构(UserSchema),我想validation电子邮件是否有正确的语法。 我目前使用的validation如下:

UserSchema.path('email').validate(function (email) { return email.length }, 'The e-mail field cannot be empty.') 

但是,这只会检查字段是否为空,而不是语法。

是否已经存在,我可以重新使用,或者我必须拿出我自己的方法,并在validationfunction内调用?

你可以使用正则expression式。 看看这个问题: 在JavaScript中validation电子邮件地址?

我以前用过这个

 UserSchema.path('email').validate(function (email) { var emailRegex = /^([\w-\.]+@([\w-]+\.)+[\w-]{2,4})?$/; return emailRegex.test(email.text); // Assuming email has a text attribute }, 'The e-mail field cannot be empty.') 

您也可以在模式中使用matchvalidate属性进行validation

 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'] } }); 

我用我的input卫生validation ,它可以用一个非常酷的方式。

安装它,然后像这样使用它:

 import { isEmail } from 'validator'; // ... const EmailSchema = new Schema({ email: { //... other setup validate: [ isEmail, 'invalid email' ] } }); 

作品,并阅读很好。

出于某种原因validate: [ isEmail, 'Invalid email.']validate()testing中效果不佳。

 const user = new User({ email: 'invalid' }); try { const isValid = await user.validate(); } catch(error) { expect(error.errors.email).to.exist; // ... it never gets to that point. } 

但是mongoose4.x (它可能也适用于较老的版本)有其他的select与unit testing一起工作。

单个validation器:

 email: { type: String, validate: { validator: function(value) { return value === 'correct@example.com'; }, message: 'Invalid email.', }, }, 

多个validation器:

 email: { type: String, validate: [ { validator: function(value) { return value === 'handsome@example.com'; }, msg: 'Email is not handsome.' }, { validator: function(value) { return value === 'awesome@example.com'; }, msg: 'Email is not awesome.' }, ], }, 

如何validation电子邮件:

我的build议是:让那些投入数百小时的专家build立适当的validation工具。 (已经在这里回答了)

npm install --save-dev validator

 import { isEmail } from 'validator'; ... validate: { validator: isEmail , message: 'Invalid email.' } 

validation器不能和mongoose一起玩,以摆脱isAsync为false的警告

 const validator = require('validator'); email:{ type:String, validate:{ validator: validator.isEmail, message: '{VALUE} is not a valid email', isAsync: false } } 

我做了这个 ,它定义了一个自定义字段types完整的电子邮件validation。