根据this documentation ,和this accompanying example ,Firebase 在转换新写入的数据时倾向于遵循以下流程:
- 客户端将数据写入 Firebase,该数据立即被接受
- 触发提供的云函数,该函数会转换数据(在上面的示例中,它会删除脏话)
- 再次写入转换后的数据,覆盖步骤 1 中写入的原始数据
也许我在这里遗漏了一些东西,但是这个流程似乎存在一些问题。例如,如果上面的步骤 2 中出现错误,并且步骤 3 从未触发,则未转换的数据将仅保留在数据库中。似乎最好在数据到达服务器后(但在写入之前)对其进行转换。随后将进行一次写入操作,如果失败,将不会留下任何松散的工件。当前的 Firebase + Google Cloud Functions 堆栈中是否有任何方法可以添加这些类型的预写数据转换?
到目前为止,我的(暂定且奇怪的)解决方案是在我的 Firebase 数据库中有一个“影子”/_temp/{endpoint}
区域,这样当我想写入 /{endpoint}
,我改为在那里写入,然后触发相关的云函数在写入 /{endpoint}
之前进行转换。这至少可以防止可能不完整的数据泄漏到我的数据库中,但它看起来非常不优雅且“hacky”。
我也有兴趣知道是否有任何服务器端方法可以在响应读取请求之前转换数据。
最佳答案
Firebase 数据库中没有任何 Hook (无论是通过 Cloud Functions 还是其他地方)允许您在将值写入数据库之前对其进行修改。临时队列是解决此用例的惯用方法。它的功能与大多数论坛软件中的版主队列非常相似。
您可以使用 HTTP 函数创建代码调用的端点,然后在其中执行转换。您可以使用类似的模式来读取数据,但您必须自己重建 Firebase 的实时同步功能。
关于javascript - Firebase 可以在写入数据之前在服务器端转换数据吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43990246/