閱讀的文件:https://firebase.google.com/docs/functions/database-events
可以寫這些事件的處理常式
- onWrite() 資料被建立、更新或刪除時,會觸發
- onCreate() 資料被建立時,會觸發
- onUpdate() 資料被更新時,會觸發
- onDelete() 資料被刪除時,會觸發
可以只針對指定的路徑,對,也因為事件資料同時包含舊的跟新的,資料量有限制,資料量大的時候要針對個別路徑拆開來寫處理常式。
可以用參數,例如 ref(‘foo/{bar}’) ,那麼存取 foo/hello 或 foo/firebase 時,都會觸發常式對 foo/ 寫入,像下面
{ "foo": { "hello": "world", "firebase": "functions" } }
會觸發兩次常式,一次是 foo/hello ,一次是 foo/firebase從 EventContext.params 可以用 bar 這個 key 去拿到 hello 或 firebase
範例
// 當有訊息加到 /messages/:pushId/original 時,執行這常式。 // 這常式會把指定路徑下的值,轉為大寫,再放到 /messages/:pushId/uppercase exports.makeUppercase = functions.database.ref('/messages/{pushId}/original') .onCreate((snapshot, context) => { // snapshot 是 DataSnapshot ,context 是 EventContext // 先取得寫入的值 const original = snapshot.val(); console.log('Uppercasing', context.params.pushId, original); const uppercase = original.toUpperCase(); // 把資料寫到 "uppercase" sibling 然後回傳 Promise // snapshot.ref.parent -> /messages/:pushId // snapshot.ref.parent.child('uppercase') -> /messages/:pushId/uppercase return snapshot.ref.parent.child('uppercase').set(uppercase); });
用 EventContext 的 auth / authType 就可以取得 authentication 資訊 (這邊我有點迷糊了,為啥 authType 可以是 ADMIN / USER ??
onWrite 的時候,是用 change, context change 是 Change,提供了 before/after property 可以存取寫之前/之後的值 。