Mongoose Schema.pre insert
J'utilise mangouste avec nodeJs et j'essaie d'implémenter un middleware appelé lors de l'utilisation d'insertMany. Dans la documentation de mangouste, il n'y a pas d'exemple du tout, mais ils confirment que la fonction de modèle insertMany déclenche le middleware suivant: insertMany ().
J'ai un schéma utilisateur de base et j'ai besoin d'insérer de nombreux crochets pour hacher le mot de passe avec bcrypt:
UserSchema.pre('insertMany', async function (err, docs, next) {
try{
docs.map(async function (doc, index) {
// async hash password
doc.password = await User.hashPassword(doc.password);
});
} catch (error) {
console.log(error);
}
next();
});
Je ne poste pas tous les schémas car tout le reste fonctionne, y compris le hachage de mot de passe et les hooks de sauvegarde. Je ne comprends pas pourquoi j'obtiens cette erreur lorsque j'essaye d'insérer de nombreux utilisateurs:
le suivant n'est pas une fonction
Habituellement, j'appelle next () pour passer au middleware suivant, mais dans ce cas, cela ne fonctionne pas. Si je supprime next (), le code ne passera pas au middleware suivant et dans les deux cas les utilisateurs ne seront pas insérés.
Est-ce que quelqu'un peut m'aider?
Réponses
C'est parce que vous fournissez de mauvais arguments dans le rappel. Hook applique uniquement l'argument «suivant». Vous devez modifier les arguments de votre fonction de rappel de (err, docs, next) à (next, docs) et cela devrait fonctionner pour vous.
Détails que vous pouvez voir ici https://mongoosejs.com/docs/middleware.html#pre
https://mongoosejs.com/docs/middleware.html#types-of-middleware