Mongoose Schema.pre insertMany middleware
Estoy usando mongoose con nodeJs y estoy tratando de implementar un middleware llamado cuando uso insertMany. En la documentación de mangosta no hay ningún ejemplo, pero confirman que la función del modelo insertMany activa el siguiente middleware: insertMany ().
Tengo un esquema de usuario básico y necesito insertMany hooks to hash password with 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();
});
No estoy publicando todo el esquema porque todo el resto funciona, incluido el hash de contraseña y los ganchos de 'guardar'. No puedo entender por qué recibo este error cuando intento insertar muchos usuarios:
siguiente no es una función
Por lo general, llamo a next () para pasar al siguiente middleware, pero en este caso no funciona. Si elimino next (), el código no pasará al siguiente middleware y en ambos casos los usuarios no se insertan.
¿Alguien me puede ayudar?
Respuestas
Es porque proporcionas argumentos incorrectos en la devolución de llamada. El gancho aplica solo el argumento 'siguiente'. Necesita cambiar los argumentos de la función de devolución de llamada de (err, docs, next) a (next, docs) y debería funcionar para usted.
Detalles que puedes ver aquí https://mongoosejs.com/docs/middleware.html#pre
https://mongoosejs.com/docs/middleware.html#types-of-middleware