【问题标题】:Can I implement beforeCreate trigger on Firebase Functions我可以在 Firebase 函数上实现 beforeCreate 触发器吗
【发布时间】:2018-07-15 08:42:41
【问题描述】:

Firebase docs 上,他们提到了 4 种类型的触发器:

  • onCreate
  • onDelete
  • onUpdate
  • onWrite

有没有办法在触发“child_added”侦听器之前侦听 Cloud Functions 中添加的行并修改添加行的字段?有没有办法实现 BeforeCreate?

Desired BeforeCreate 循环(在 Cloud Functions 中):

  • 请求添加新消息
  • 更改消息字段
  • 添加带有修改字段的新消息
  • 客户端收到“child_added”事件

【问题讨论】:

    标签: firebase google-cloud-functions


    【解决方案1】:

    Cloud Functions 中实时数据库的所有事件在提交写入之后异步触发。因此,在您的函数更改数据之前,其他用户可能已经看到了数据。

    要解决这个问题,您需要确保数据仅写入到每个人都看到的位置它被验证/修改之后。

    要在新数据的侦听器可以看到之前验证/修改新数据,您有两种选择:

    1. 使用 HTTP 触发函数写入数据。应用程序代码调用 HTTP 函数,该函数执行您想要的数据操作,然后将结果写入数据库。

    2. 让应用程序写入“审核队列”,它只是数据库中的一个单独位置。 Cloud Function 从该队列触发,验证/修改数据,将其写入实际位置,然后将其从队列中删除。

    但是,使用这两种方法,您会丢失 Firebase 实时数据库的部分透明离线行为,因此您必须做出选择。

    【讨论】:

      【解决方案2】:

      您需要使用onWrite 才能工作,因为您在使用child_added 时会多次保存到数据库中。

      onWrite(handler) 返回包含非空函数的函数.CloudFunction.database.DeltaSnapshot

      每次发生任何类型的 Firebase 实时数据库写入(创建、更新或删除)时都会触发的事件处理程序。

      更多信息在这里:https://firebase.google.com/docs/reference/functions/functions.database.RefBuilder#onWrite

      Op 想要执行以下操作:

      请求添加新消息

      如果他想向最终用户请求一条新消息,那么最好在客户端完成。

      更改消息字段

      在这里,他想更改字段中写入的内容,这通常也是在客户端而不是在云函数中完成的。

      添加带有修改字段的新消息

      这里他想将新消息添加到数据库中(根据我的分析)。然后这可以在云函数中完成,并且可以使用set()添加消息

      客户端收到“child_added”事件

      然后在这里将新消息添加到数据库后,他希望客户端接收数据库触发器,该触发器将由新消息触发。在这里他可以使用onWrite()onCreate()等云功能

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-06-15
        • 2019-02-24
        • 1970-01-01
        • 2013-08-30
        • 1970-01-01
        • 2020-08-14
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多