我可以在Firebase函数上实现beforeCreate触发器吗?

时间:2018-02-05 13:16:37

标签: firebase google-cloud-functions

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

  • 的onCreate
  • onDelete
  • 的onUpdate
  • onWrite

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

所需的BeforeCreate循环(在云函数中):

  • 请求添加新消息
  • 更改消息字段
  • 添加包含已修改字段的新邮件
  • 客户收到“child_added”事件

2 个答案:

答案 0 :(得分:5)

在提交写入之后,云功能中的实时数据库的所有事件都会异步触发。因此,在您的功能可以更改之前,其他用户可能已经看过数据。

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

要在侦听该数据之前验证/修改新数据,您有两种选择:

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

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

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

答案 1 :(得分:0)

您需要使用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()

等云功能