マングースSchema.preinsertManyミドルウェア

Sep 23 2020

nodeJでmongooseを使用しており、insertManyを使用するときに呼び出されるミドルウェアを実装しようとしています。マングースのドキュメントには例はまったくありませんが、insertManyモデル関数が次のミドルウェアをトリガーすることを確認しています:insertMany()。

基本的なユーザースキーマがあり、bcryptでパスワードをハッシュするためにinsertManyフックが必要です。

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

パスワードハッシュや「保存」フックを含む残りのすべてが機能するため、すべてのスキーマを投稿しているわけではありません。多くのユーザーを挿入しようとすると、なぜこのエラーが発生するのか理解できません。

次は機能ではありません

通常、next()を呼び出して次のミドルウェアに進みますが、この場合は機能しません。next()を削除すると、コードは次のミドルウェアに移動せず、どちらの場合もユーザーは挿入されません。

誰かが私を助けることができますか?

回答

1 PavloKostohrys Sep 23 2020 at 21:14

コールバックで間違った引数を指定したためです。フックは「次の」引数のみを適用します。コールバック関数の引数を(err、docs、next)から(next、docs)に変更する必要があり、それでうまくいくはずです。

あなたがここで見ることができる詳細 https://mongoosejs.com/docs/middleware.html#pre

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