Mongoose Schema.pre insertMany ara katman yazılımı

Sep 23 2020

NodeJs ile firavun faresi kullanıyorum ve insertMany kullanırken adı verilen bir ara yazılım uygulamaya çalışıyorum. Firavun faresi belgelerinde hiçbir örnek yoktur, ancak insertMany model işlevinin şu ara yazılımı tetiklediğini doğrularlar: insertMany ().

Temel bir Kullanıcı şemam var ve parolayı bcrypt ile hash yapmak için insertMany kancasına ihtiyacım var:

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

Tüm şemayı göndermiyorum çünkü parola hashing ve 'kaydetme' kancaları dahil geri kalan her şey çalışıyor. Birçok kullanıcı eklemeye çalıştığımda neden bu hatayı aldığımı anlayamıyorum:

sonraki bir işlev değil

Genellikle sonraki ara katman yazılımına geçmek için next () işlevini çağırırım, ancak bu durumda işe yaramaz. Next () öğesini kaldırırsam, kod sonraki ara katman yazılımına gitmez ve her iki durumda da kullanıcılar eklenmez.

Biri bana yardım edebilir mi?

Yanıtlar

1 PavloKostohrys Sep 23 2020 at 21:14

Bunun nedeni, geri aramada yanlış argümanlar sağlamanızdır. Kanca yalnızca 'sonraki' argümanı uygular. Geri arama işlevi argümanlarınızı (err, docs, next) yerine (next, docs) olarak değiştirmeniz gerekir ve bu sizin için çalışmalıdır.

Burada görebileceğiniz detaylar https://mongoosejs.com/docs/middleware.html#pre

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