Mongoose Schema.pre insertMany Middleware

Sep 23 2020

Ich verwende Mungo mit NodeJs und versuche, eine Middleware zu implementieren, die bei Verwendung von insertMany aufgerufen wird. In der Mungo-Dokumentation gibt es überhaupt kein Beispiel, aber sie bestätigen, dass die Modellfunktion insertMany die folgende Middleware auslöst: insertMany ().

Ich habe ein grundlegendes Benutzerschema und benötige insertMany-Hooks, um das Passwort mit bcrypt zu hashen:

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();
});

Ich poste nicht alle Schemas, da der Rest funktioniert, einschließlich Passwort-Hashing und "Speichern" -Hooks. Ich kann nicht verstehen, warum ich diesen Fehler erhalte, wenn ich versuche, viele Benutzer einzufügen:

next ist keine Funktion

Normalerweise rufe ich next () auf, um zur nächsten Middleware zu gelangen, aber in diesem Fall funktioniert es nicht. Wenn ich next () entferne, wird der Code nicht zur nächsten Middleware weitergeleitet, und in beiden Fällen werden Benutzer nicht eingefügt.

Kann mir jemand helfen?

Antworten

1 PavloKostohrys Sep 23 2020 at 21:14

Dies liegt daran, dass Sie im Rückruf falsche Argumente angeben. Hook wendet nur das Argument 'next' an. Sie müssen Ihre Rückruffunktionsargumente von (err, docs, next) in (next, docs) ändern, und es sollte für Sie funktionieren.

Details können Sie hier sehen https://mongoosejs.com/docs/middleware.html#pre

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