【问题标题】:Firestore Cloud Function - Get request data object in onUpdate/onCreateFirestore 云函数 - 在 onUpdate/onCreate 中获取请求数据对象
【发布时间】:2019-01-08 18:23:33
【问题描述】:

在编写firebase规则时,您可以通过request.resource.data访问请求数据。这很有用,因为您可以查看请求的性质以确定其意图、写入目标以及允许或拒绝。这允许将属性合并到用户拥有的文档中的对象中,而不是使用嵌套的文档集合。

我想在云函数回调更新/写入/等中访问相同的请求数据,但我没有看到它,我只好与change.beforechange.after 进行对象比较。这不是问题,但我是否遗漏了文档中的某些内容?

根据文档:https://firebase.google.com/docs/firestore/extend-with-functions

exports.myFunctionName = functions.firestore.document('users/marie').onWrite((change, context) => {
   // ... the change or context objects do not contain the request data
});

【问题讨论】:

  • 你能添加你的代码或一些非常简单的例子来说明清楚吗?
  • 我们也在寻找同样的东西,我们的用例是我们想知道客户端是否在请求中发送了一个标志。详情如下:如果客户端在更新中发送一个标志,我们想触发一些功能,如果无法获取实际请求,我们将不得不在执行我们的逻辑后清除标志,这将导致额外的写入成本。我们当然可以单独拥有一个云函数并让客户端调用该函数,但我们希望避免它,因为我们还需要关心容错。

标签: firebase google-cloud-firestore google-cloud-functions


【解决方案1】:

当我意识到a function listening for updates 被触发时,我遇到了完全相同的问题,而不管属性是否被更新,尽管有'status' in data 检查。数据代表handler.after.data 的捕获量。尽管我无法从handlercontext 访问请求数据,但我能够通过添加一个用于相同目的的附加检查来解决问题。即:

const dataBefore = handler.before.data();
const dataAfter = handler.after.data();

if (status in dataBefore && status in dataAfter) {
  if (dataBefore.status === 'unpublished' && dataAfter.status === 'published') {
    // handle update
  }
}

【讨论】:

    猜你喜欢
    • 2021-04-11
    • 1970-01-01
    • 2021-11-18
    • 2020-06-21
    • 1970-01-01
    • 2018-05-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多