Mongoose expandir la validación por defecto

Quiero construir “minLength” y “maxLength” en las reglas de validación de esquema de mongoose, la solución actual es:

var blogSchema = new Schema({ title: { required: true, type: String } }); blogSchema.path('title').validate(function(value) { if (value.length  32) return next(new Error('length')); }); 

Sin embargo, creo que esto debería simplificarse simplemente agregando reglas de esquema personalizadas como:

 var blogSchema = new Schema({ title: { type: String, required: true, minLength: 8, maxLength: 32 } }); 

¿Cómo puedo hacer esto, es esto posible?

Echa un vistazo a la biblioteca mongoose-validador . Integra la biblioteca de validación de nodos para su uso dentro de esquemas de mongoose de una manera muy similar a la que usted describió.

Específicamente, el validador de nodos len o los métodos min y max deben proporcionar la lógica que necesita.

Tratar :

 var validate = require('mongoose-validator').validate; var blogSchema = new Schema({ title: { type: String, required: true, validate: validate('len', 8, 32) } }); 

Tuve la misma solicitud de función. No sé, por qué la mongoose no ofrece mín / máx para el tipo de cadena. Podría extender el tipo de esquema de cadena de la mongoose (acabo de copiar la función mín. / Máx. Del tipo de esquema de número y lo adapté a las cadenas, funcionó bien para mis proyectos). Asegúrese de llamar al parche antes de crear el esquema / modelos:

 var mongoose = require('mongoose'); var SchemaString = mongoose.SchemaTypes.String; SchemaString.prototype.min = function (value) { if (this.minValidator) { this.validators = this.validators.filter(function(v){ return v[1] != 'min'; }); } if (value != null) { this.validators.push([this.minValidator = function(v) { if ('undefined' !== typeof v) return v.length >= value; }, 'min']); } return this; }; SchemaString.prototype.max = function (value) { if (this.maxValidator) { this.validators = this.validators.filter(function(v){ return v[1] != 'max'; }); } if (value != null) { this.validators.push([this.maxValidator = function(v) { if ('undefined' !== typeof v) return v.length <= value; }, 'max']); } return this; }; 

PD: ya que este parche usa algunas variables internas de la mongoose, debe escribir pruebas unitarias para sus modelos, para notar cuándo se rompen los parches.

Ahora existe maxlength y minlength. Tu código debería funcionar de la siguiente manera.

  var mongoose = require('mongoose'); var blogSchema = new mongoose.Schema({ title: { type: String, required: true, minLength: 8, maxLength: 32 } });