中介軟體
中介軟體(也稱為前後掛鉤)是在執行非同步功能期間傳遞控制的函式。中介軟體在架構級別指定,對編寫外掛很有用。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);
});