Mongoose Schema.pre insertMany middleware

Sep 23 2020

Estou usando o mongoose com nodeJs e estou tentando implementar um middleware chamado ao usar insertMany. Na documentação do mongoose, não há nenhum exemplo, mas eles confirmam que a função do modelo insertMany aciona o seguinte middleware: insertMany ().

Eu tenho um esquema de usuário básico e preciso insertMany ganchos para a senha de hash com 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();
});

Não estou postando todos os esquemas porque todo o resto funciona, incluindo hashing de senha e ganchos para 'salvar'. Não consigo entender por que estou recebendo este erro quando tento inserir muitos usuários:

próximo não é uma função

Normalmente chamo next () para prosseguir para o próximo middleware, mas neste caso não funciona. Se eu remover next (), o código não irá para o próximo middleware e em ambos os casos os usuários não serão inseridos.

Alguém pode me ajudar?

Respostas

1 PavloKostohrys Sep 23 2020 at 21:14

É porque você fornece argumentos errados no retorno de chamada. O gancho aplica apenas o argumento 'próximo'. Você precisa alterar os argumentos da função de retorno de chamada de (err, docs, próximo) para (próximo, docs) e deve funcionar para você.

Detalhes você pode ver aqui https://mongoosejs.com/docs/middleware.html#pre

https://mongoosejs.com/docs/middleware.html#types-of-middleware