使用Cloud Function检查Firebase Realtime Database中是否存在数据库节点

时间:2019-05-13 08:54:57

标签: javascript firebase firebase-realtime-database google-cloud-functions

我具有onUpdate云功能,需要检查是否存在数据库节点。

对于我来说,理想的方法是:

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

但是它需要快照,我给它一个承诺。

是否可以通过任何方式检查带有承诺的文件是否存在?

除了.once.then以外,还有没有更好的方法来制作快照?

1 个答案:

答案 0 :(得分:0)

我假设写“我需要检查文件是否存在”是指检查数据库节点是否存在(即团队成员)保存在团队名称下。)我有权随意修改您的问题标题和内容。


请注意,如果您想通过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)方法的处理程序是一个带有两个参数的函数,请参见https://firebase.google.com/docs/reference/functions/functions.database.RefBuilder#onUpdate。但是第二个是可选的。与onWrite(handler)方法相同。