iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 29
1

終於到了倒數第二天

現在一直在努力的寫前後端的程式碼跟串接

在前端 RxDB 中有一些 Middleware 和 hook 可以使用

所以還是要先了解一下相關的生命週期

RxDB 沒有驗證的 hook

因為在基本驗證的部分會在 Schema 處理

使用情境

  • 複雜的驗證
  • 刪除有相依性的 Record
  • 非同步的 default 設定
  • 觸發非同步 task
  • 觸發客製化 Events
  • 通知其他服務

plainData 原始資料

RxDocument RxDocument 物件

Insert

Insert 新增一筆 Record 的時候

preInsert

建立新的 Record 前觸發

preInert(cb(plainData), boolean)

  • cb
    • 非同步的 function 可以回傳 Promise 進行非同步行為
  • Boolean
    • 是否要和 Insert 同時進行 (true: 併行, false: 先執行完之後再新增)

postInsert

建立新的 Record 後觸發

preInert(cb(plainData, RxDocuemnt), boolean)

  • cb
    • 非同步的 function 可以回傳 Promise 進行非同步行為
  • Boolean
    • 是否要和 Insert 同時進行 (true: 併行, false: 先執行完之後再新增)

Save Hook

RxDocuemnt.save 被呼叫 或是修改的時候

preSave

preSave(cb(plainData, RxDocuemnt), boolean)

  • cb
    • 非同步的 function 可以回傳 Promise 進行非同步行為
  • Boolean
    • 是否要和 Insert 同時進行 (true: 併行, false: 先執行完之後再新增)

postSave

postSave(cb(plainData, RxDocuemnt), boolean)

  • cb
    • 非同步的 function 可以回傳 Promise 進行非同步行為
  • Boolean
    • 是否要和 Insert 同時進行 (true: 併行, false: 先執行完之後再新增)

Remove

preRemove

preRemove(cb(plainData, RxDocuemnt), boolean)

  • cb
    • 非同步的 function 可以回傳 Promise 進行非同步行為
  • Boolean
    • 是否要和 Insert 同時進行 (true: 併行, false: 先執行完之後再新增)

postRemove

postRemove(cb(plainData, RxDocuemnt), boolean)

  • cb
    • 非同步的 function 可以回傳 Promise 進行非同步行為
  • Boolean
    • 是否要和 Insert 同時進行 (true: 併行, false: 先執行完之後再新增)

特殊 hook

postCreate

這個 hook 會被所有的 RxDocuemnt 建立的時候被呼叫

可以被在中間放入各種客製化的資料

但是這個 hook 不能夠使用非同步

myCollection.postCreate(function(plainData, rxDocument){
    Object.defineProperty(rxDocument, 'myField', {
        get: () => 'foobar',
    });
});

const doc = await myCollection.findOne().exec();

console.log(doc.myField);
// 'foobar'

參考資料

Middleware and hook


上一篇
Mongoose Schema TimeZone
下一篇
結語
系列文
I Shot You 不小心30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言