2017-06-17 17 views
5

我有以下功能偵聽到onWrite事件數據庫觸發器像這樣:火力地堡:檢查關於「寫入或刪除」的onWrite活動

exports.sendNotifications = functions.database.ref('/events/{eventId}/registered') 
     .onWrite(event => { 

      ... 
     }); 

無論上述函數被調用是否所述節點是刪除或添加。如何檢查onWrite事件是否爲該特定節點的「刪除」事件或「添加」事件,以便該函數僅在「添加」事件時才被調用。

回答

5

傳遞給函數的event包含觸發該函數的位置的以前的數據和新的數據。有了這兩條信息,您可以推斷它是新寫入,更新還是刪除。

Firebase documentation for database functions

exports.makeUppercase = functions.database.ref('/messages/{pushId}/original') 
.onWrite(event => { 
    // Only edit data when it is first created. 
    if (event.data.previous.exists()) { 
    return; 
    } 
    // Exit when the data is deleted. 
    if (!event.data.exists()) { 
    return; 
    } 
+0

如果你沒有做任何工作,確保你從firebase函數返回null –

0

如果您更改雲公司的FireStore那麼這將是:

// Only edit data when it is first created. 
    if (event.data.previous.exists) { 
    return; 
    } 
    // Exit when the data is deleted. 
    if (!event.data.exists) { 
    return; 
    } 
0

閱讀下面的文章後,加入另一項檢查事件元素到if-then聲明有一些好處:https://firebase.googleblog.com/2017/07/cloud-functions-realtime-database.html

exports.sendNotification = functions.database 
     .ref("/messages/{messageId}").onWrite(event => { 
    if (event.data.exists() && !event.data.previous.exists()) { 
     // This is a new message, not a change or a delete. 
     // Put code here 
    } 
}) 

如果從數據庫中讀取失敗(可能是網絡錯誤???),則event.data.previous.exists()將爲false。 event.data.exists()的添加確保事件元素確實具有可以使用的數據。