2012-07-04 8 views
10

Quiero crear una capa modelo con Mangosta por mis documentos del usuario, lo que hace:Mangosta ODM, cambie las variables antes de guardar

  1. validación (único, longitud)
  2. canonicalisation (nombre de usuario y correo electrónico se convierten en minúsculas para comprobar singularidad)
  3. generación sal
  4. hash de la clave
  5. (registro)

Se requieren todas estas acciones para ejecutarse antes de persistir en la base de datos. Afortunadamente, mongoose admite validación, complementos y middleware.

Lo malo es que no puedo encontrar ningún buen material sobre el tema. Los documentos oficiales en mongoosejs.com son demasiado cortos ...

¿Alguien tiene un ejemplo sobre pre acciones con Mongoose (o un complemento completo que hace todo, si existe)?

Saludos

+0

pensé que la documentación sobre mongoosejs.com era bastante claro en esta área. ¿Qué has probado que no está funcionando? – JohnnyHK

+0

el sector de validación es claro, pero no cómo preparar el objeto antes de una persistencia. Creo que Schema.pre ('guardar', devolución de llamada); función podría serlo pero falta el ejemplo completo también. No sé cómo acceder a los atributos del objeto en la función pre –

+0

. Usted accede a los atributos del documento a través de 'this' en su función de middleware. – JohnnyHK

Respuesta

24

En su función Schema.pre('save', callback), this es el documento que está siendo salvado, y sus modificaciones a antes de llamar next() alterar lo que está guardado.

14

Otra opción es usar Getters. He aquí un ejemplo de la página web:

function toLower (v) { 
    return v.toLowerCase(); 
} 

var UserSchema = new Schema({ 
    email: { type: String, set: toLower } 
}); 

http://mongoosejs.com/docs/getters-setters.html

+0

Vale la pena señalar que esta es la única opción si el valor que está pasando no es del mismo tipo que se define en el esquema para la propiedad especificada . P.ej. Usted tiene una propiedad 'amount' que es de tipo' number' pero el valor que transfiere para el procesamiento es 'string'. – Don

8
var db = require('mongoose'); 
var schema = new db.Schema({ 
    foo:  { type: String } 
}); 

schema.pre('save', function(next) { 
    this.foo = 'bar'; 

    next(); 
}); 

db.model('Thing', schema); 
+0

se puede observar, que pre para 'guardar' no se activa en la actualización. use 'actualizar' en su lugar – sasha

Cuestiones relacionadas