根据this documentation和this accompanying example,Firebase在转换新编写的数据时会遵循以下流程:
也许我在这里遗漏了一些东西,但这种情况似乎存在一些问题。例如,如果上面的步骤2中存在错误,并且从未触发第3步,则未转换的数据将仅停留在数据库中。似乎最好在数据到达服务器之后,但在写入之前对其进行转换。接下来是单个写操作,如果失败则不会留下任何松散的伪像。当前的Firebase + Google Cloud Functions堆栈中是否有任何方法可以添加这些类型的预写数据转换?
到目前为止,我的(暂定和奇怪)解决方案是在我的Firebase数据库中有一个“影子”/_temp/{endpoint}
区域,这样当我想写入/{endpoint}
时,我会在那里写,然后在写入/{endpoint}
之前触发相关的云功能进行转换。这至少可以防止潜在的不完整数据泄漏到我的数据库中,但它似乎非常不优雅和“hacky”。
我也有兴趣知道在响应读取请求之前是否有任何服务器端方法来转换数据。
答案 0 :(得分:2)
Firebase数据库中没有挂钩(既不通过云功能也不通过其他地方),允许您在将值写入数据库之前对其进行修改。临时队列是解决此用例的惯用方法。它的功能与大多数论坛软件中的主持人队列非常相似。
您可以使用HTTP函数创建代码调用的端点,然后在那里执行转换。您可以使用类似的模式来读取数据,但您必须自己重建Firebase的实时同步功能。