繁体   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