Recentemente, descobri que precisava acessar o valor anterior de alguns itens do esquema mongoose em meu pre('save')
middleware e pensei que outras pessoas poderiam achar esta solução útil:
Defina seu esquema
var Model = new mongoose.Schema({
email: {
type: String,
// This method holds the magic
set: function(email) {
this._email = this.email;
return email;
}
});
Uso de Middleware
Model.pre('save', function (next) {
var oldEmail = this._email;
if(this.isModified('email')) {
// Some condition that fires before save if the email changes ... or something.
// Maybe we wanna fire off an email to the old address to let them know it changed
console.log("%s has changed their email to %s", oldEmail, this.email);
}
next();
});
Então, digamos que meu e-mail original foi josey.morton+isOnCoderwall@domain.com
e em algum momento eu ganhei algum bom senso (provavelmente devido a estar cansado de digitar isso o tempo todo) e mude para something@sensible.com
.
A modelo veria que 1.
Meu e-mail mudou e 2.
saberia do que ele mudou.
O middleware poderia então disparar um e-mail para o endereço anterior e, se eu não modificasse o e-mail, saberia que estou h4x0rd e poderia agir de acordo.
Espero que isso ajude alguém, caso contrário, os últimos 4 minutos foram perdidos e minha vida é um fracasso.