【问题标题】:Checking with Cloud Function if a database node exists in Firebase Realtime Database使用 Cloud Function 检查 Firebase 实时数据库中是否存在数据库节点
【发布时间】:2019-05-13 20:05:32
【问题描述】:

我有一个 onUpdate 云函数,我需要检查数据库节点是否存在。

对我来说,理想的做法是:

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

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

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

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

【问题讨论】:

  • “除了 .once.then 之外,还有更好的方法来制作快照吗?”是什么意思?在这一点上,您可以提出另一个 SO 问题,而不是在一个 SO 问题中组合两个问题。

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


【解决方案1】:

我假设写“我需要检查 file 是否存在”是指检查 数据库节点 是否存在(即团队成员保存在团队名称下)。我冒昧地修改了您的问题标题和内容。


请注意,如果您想通过onUpdate() 触发器检测团队成员是否不存在,您不会成功,因为此云函数只有在节点之前存在,因为我们观察更新(而不是创建)。

所以您可能应该使用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) 方法相同。

【讨论】:

  • 感谢 onWrite 的建议,但是关于 2 个参数的问题,如果我们不使用其中一个参数(例如在另一个 onUpdate 函数中我不使用上下文)不是更干净只是删除上下文还是您还需要写下来?
  • 是的,你是对的,第二个参数是可选的,可以省略。我在回答中将我的评论作为“脚注”移动。如果您认为我的回答解决了您的问题,您可以接受,请参阅stackoverflow.com/help/someone-answers。谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-05-10
  • 2021-11-14
  • 1970-01-01
  • 1970-01-01
  • 2020-11-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多