Firebase可以在写入之前转换数据服务器端吗?

时间:2017-05-15 23:27:30

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

根据this documentationthis accompanying example,Firebase在转换新编写的数据时会遵循以下流程:

  1. 客户端将数据写入Firebase,该数据立即被接受
  2. 触发提供的Cloud Function,它会转换数据(在上例中,它会删除咒骂词)
  3. 再次写入转换后的数据,覆盖在步骤1中写入的原始数据
  4. 也许我在这里遗漏了一些东西,但这种情况似乎存在一些问题。例如,如果上面的步骤2中存在错误,并且从未触发第3步,则未转换的数据将仅停留在数据库中。似乎最好在数据到达服务器之后,但在写入之前对其进行转换。接下来是单个写操作,如果失败则不会留下任何松散的伪像。当前的Firebase + Google Cloud Functions堆栈中是否有任何方法可以添加这些类型的预写数据转换?

    到目前为止,我的(暂定和奇怪)解决方案是在我的Firebase数据库中有一个“影子”/_temp/{endpoint}区域,这样当我想写入/{endpoint}时,我会在那里写,然后在写入/{endpoint}之前触发相关的云功能进行转换。这至少可以防止潜在的不完整数据泄漏到我的数据库中,但它似乎非常不优雅和“hacky”。​​

    我也有兴趣知道在响应读取请求之前是否有任何服务器端方法来转换数据。

1 个答案:

答案 0 :(得分:2)

Firebase数据库中没有挂钩(既不通过云功能也不通过其他地方),允许您在将值写入数据库之前对其进行修改。临时队列是解决此用例的惯用方法。它的功能与大多数论坛软件中的主持人队列非常相似。

您可以使用HTTP函数创建代码调用的端点,然后在那里执行转换。您可以使用类似的模式来读取数据,但您必须自己重建Firebase的实时同步功能。