中介軟體

中介軟體(也稱為前後掛鉤)是在執行非同步功能期間傳遞控制的函式。中介軟體在架構級別指定,對編寫外掛很有用。Mongoose 4.0 有兩種型別的中介軟體:檔案中介軟體和查詢中介軟體。以下文件功能支援文件中介軟體。

  • 在裡面
  • 驗證
  • 儲存
  • 去掉

以下模型和查詢功能支援查詢中介軟體。

  • 計數
  • 找一個
  • findOneAndRemove
  • findOneAndUpdate
  • 更新

文件中介軟體和查詢中介軟體都支援前後掛鉤。

有兩種型別的預鉤,序列和並行。

序列

當每個中介軟體呼叫 next 時,序列中介軟體一個接一個地執行。

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

平行

並行中介軟體提供更細粒度的流程控制。

var schema = new 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)在每個中介軟體呼叫完成之前不會執行。

釋出中介軟體

post 中介軟體在 hooked 方法之後執行,並且所有的預中介軟體都已完成。post 中介軟體不直接接收流控制,例如沒有傳遞下一個或完成的回撥。post hooks 是一種為這些方法註冊傳統事件偵聽器的方法。

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