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

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

根据this documentation ,和this accompanying example ,Firebase 在转换新写入的数据时倾向于遵循以下流程:

  1. 客户端将数据写入 Firebase,该数据立即被接受
  2. 触发提供的云函数,该函数会转换数据(在上面的示例中,它会删除脏话)
  3. 再次写入转换后的数据,覆盖步骤 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/

相关文章:

javascript - React hooks - useState() 不会使用新的状态更新重新渲染 UI

android - Firebase 中的 ExceptionInInitializerError

firebase - 如何在 Cloud Firestore 中保存来自 Cloud Function 的文档引用?

javascript - 从云函数中的 firebase 读取

javascript - jQuery UI 选项卡错误 : Mismatching fragment identifier.

javascript - Chart.js 插件注释线阴影

javascript - 在函数之间传递值

java - 无论如何,是否可以以图形或图表形式查看来自 Firestore 的数据?

javascript - 如何使用 Firebase 数据库(react-native)在 ​​ListView 末尾添加 "Load More"

javascript - 更改 reactjs 组件状态中字段的值(使用从 firebase 获取的数据)