2014-07-15 2 views
1

J'ai 2 crochets (dans des fichiers différents) sur un modèle comme celui-ci:Changer la priorité des crochets dans mangouste

model.pre('save', function(next) { 
    if (this.isModified('password')) 
     this.set('password, hash(this.get('password')) 
    next() 
}) 

model.pre('save', function() { 
    if (this.isNew) 
     this.set('password', generatePassword()) 
    next() 
}) 

Mon premier crochet vient d'un module, il doit être le premier et je ne peux pas modifier il. Il vérifie que le champ du mot de passe a été modifié et le hache s'il l'était. Mon deuxième crochet a été créé par moi, je définis un mot de passe généré aléatoirement lorsque l'utilisateur est créé.

Mon problème est que mon premier hook ne va pas forcer mon mot de passe car il est passé avant le second. J'ai essayé d'appeler this.save dans mon deuxième crochet mais isModified est faux si je fais cela.

J'ai dû copier la fonction hash du premier crochet dans le deuxième fichier pour le faire fonctionner, mais c'est loin d'être parfait.

Donc, je voudrais savoir s'il existe un moyen d'exécuter des hooks dans un ordre de priorité dans mongoose? Merci.

Répondre

1

Malheureusement, la mangouste ne permet pas de prioriser pre save crochets, ou tout autre type de crochets d'ailleurs. Toutefois, dans votre cas particulier, vous pouvez envisager d'utiliser le crochet post validate.

model.post('validate', function (doc) { 
    if (doc.isNew) { 
     doc.set('password', generatePassword()); 
    } 
}); 

post validate crochets exécutent avant que le document est enregistré, et avant tout pre save définis par l'utilisateur crochets.

Questions connexes