usa tutorial que para instalar index funciona elastic crear consultas como comandos node.js mongodb mongoose

node.js - tutorial - Mongoose: valida la sintaxis del correo electrónico



para que se usa elastic search (6)

El validador no puede jugar bien con la mangosta para deshacerse del conjunto de advertencia isAsync to false

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

Tengo un esquema de mangosta para los usuarios (UserSchema) y me gustaría validar si el correo electrónico tiene la sintaxis correcta. La validación que uso actualmente es la siguiente:

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

Sin embargo, esto solo verifica si el campo está vacío o no, y no para la sintaxis.

¿Ya existe algo que pueda volver a usar o tendré que idear mi propio método y llamarlo dentro de la función de validación?


Por alguna razón, validate: [ isEmail, ''Invalid email.''] no funciona bien con las pruebas validate() .

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. }

Pero mongoose 4.x (también podría funcionar para versiones anteriores) tiene otras opciones alternativas que funcionan de la mano con las pruebas unitarias.

Validador simple:

email: { type: String, validate: { validator: function(value) { return value === ''[email protected]''; }, message: ''Invalid email.'', }, },

Múltiples validadores:

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

Cómo validar el correo electrónico:

Mi recomendación: deje eso a los expertos que han invertido cientos de horas en la creación de herramientas de validación adecuadas. (ya respondió here también)

npm install --save-dev validator

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


Puedes usar una expresión regular. Echa un vistazo a esta pregunta: ¿ Validar la dirección de correo electrónico en JavaScript?

Lo he usado en el pasado.

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.'')


Tipo de correo electrónico para esquemas - mongoose-type-email

var mongoose = require(''mongoose''); require(''mongoose-type-email''); var UserSchema = new mongoose.Schema({ email: mongoose.SchemaTypes.Email });


Utilizo el validator para mi sanidad de entrada, y puede usarse de una manera muy buena.

Instálalo y luego úsalo así:

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

funciona un placer, y se lee muy bien.


también podría usar la coincidencia o la propiedad de validación para la validación en el esquema

ejemplo

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