サーチ…


ミドルウェア

ミドルウェア(プリフックとポストフックとも呼ばれる)は、非同期関数の実行中に制御が渡される関数です。ミドルウェアはスキーマレベルで指定され、プラグインの作成に役立ちます。 Mongoose 4.0には、ドキュメントミドルウェアとクエリミドルウェアの2種類のミドルウェアがあります。ドキュメントミドルウェアは、以下のドキュメント機能でサポートされています。

  • その中に
  • 検証
  • 保存する
  • 除去する

Queryミドルウェアは、以下のModelおよびQuery機能でサポートされています。

  • カウント
  • 見つける
  • findOne
  • findOneAndRemove
  • findOneAndUpdate
  • 更新

ドキュメントミドルウェアとクエリミドルウェアの両方が、プリフックとポストフックをサポートしています。


プレ

プリフックには、シリアルとパラレルの2種類があります。

シリアル

シリアルミドルウェアは、各ミドルウェアが次に呼び出すときに次々に実行されます。

var schema = new Schema(..);
schema.pre('save', function(next) {
  // do stuff
  next();
});

平行

並列ミドルウェアは、より細かいフロー制御を提供します。

var schema =新しいスキーマ(..);

// `true` means this is a parallel middleware. You **must** specify `true`
// as the second parameter if you want to use parallel middleware.
schema.pre('save', true, function(next, done) {
  // calling next kicks off the next middleware in parallel
  next();
  setTimeout(done, 100);
});

フックされたメソッド(この場合save)は、各ミドルウェアによってdoneが呼び出されるまで実行されません。


ポストミドルウェア

フックされたメソッドとそれ以前のミドルウェアのすべてが完了した後に実行されます。ポストミドルウェアはフロー制御を直接受け取ることはありません。例えば、次のコールバックや完了コールバックは渡されません。ポストフックは、これらのメソッドに従来のイベントリスナーを登録する方法です。

schema.post('init', function(doc) {
  console.log('%s has been initialized from the db', doc._id);
});
schema.post('validate', function(doc) {
  console.log('%s has been validated (but not saved yet)', doc._id);
});
schema.post('save', function(doc) {
  console.log('%s has been saved', doc._id);
});
schema.post('remove', function(doc) {
  console.log('%s has been removed', doc._id);
});


Modified text is an extract of the original Stack Overflow Documentation
ライセンスを受けた CC BY-SA 3.0
所属していない Stack Overflow