簡體   English   中英

如果Firebase實時數據庫中存在數據庫節點,請使用雲功能檢查

[英]Checking with Cloud Function if a database node exists in Firebase Realtime Database

我有一個onUpdate雲功能,我需要檢查數據庫節點是否存在。

對我而言,理想的做法是:

exports.watchTeamMemberUpdates = functions.database
  .ref('/teams/{teamName}')
  .onUpdate((change) => {
     if (!change.before.exists()) {
       console.log('exists error');
       return null;
     }
});

但它需要一個快照,我正在給它一個承諾。

是否可以以任何方式檢查文件是否存在承諾?

還有更好的方法來制作除.once.then之外的快照嗎?

我假設通過編寫“我需要檢查文件是否存在”,您的意思是檢查數據庫節點是否存在(即團隊成員是否以團隊名稱保存)。 我冒昧地相應地修改你的問題標題和內容。


請注意,如果要檢測團隊成員是否不存在onUpdate()觸發器, 則不會成功 ,因為只有節點存在之前才會觸發此Cloud Function,因為我們會查看更新(而不是創建) )。

所以你應該使用onWrite()觸發器。 下面是兩種觸發器的代碼。 我建議您在數據庫中嘗試多次寫入和更新(當然,在部署了這兩個函數之后)並查看打印到Cloud Function日志的內容。

exports.watchTeamMemberUpdates = functions.database
  .ref('/teams/{teamName}')
  .onUpdate((change, context) => {
    if (!change.before.exists()) {
      console.log('watchTeamMemberUpdates: exists error');
      return null;
    } else {
      console.log('watchTeamMemberUpdates: Team member exists');
      return null;
    }
  });

exports.watchTeamMemberWrites = functions.database
  .ref('/teams/{teamName}')
  .onWrite((change, context) => {
    if (!change.before.exists()) {
      console.log('watchTeamMemberWrites: exists error');
      return null;
    } else {
      console.log('watchTeamMemberWrites: Team member exists');
      return null;
    }
  });

PS:請注意,要傳遞給onUpdate(handler)方法的onUpdate(handler)是一個包含兩個參數的函數,請參閱https://firebase.google.com/docs/reference/functions/functions.database.RefBuilder#onUpdate 然而,第二個是可選的。 這與onWrite(handler)方法相同。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM