Mongoose Schema.pre insertMany middleware

Sep 23 2020

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

1 PavloKostohrys Sep 23 2020 at 21:14

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