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.')
您也可以在模式中使用match或validate属性进行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。