【问题标题】:Deploying Cloud Firestore Trigger function from GCP Console从 GCP Console 部署 Cloud Firestore 触发器功能
【发布时间】:2020-11-09 00:46:02
【问题描述】:

我有一个函数在我的云 Firestore 数据库的 onUpdate 触发器上触发。 更改数据库时根本没有调用该函数。

我没有使用 firestore CLI 部署该函数,而是使用 GCP Console 部署它。

函数如下:

exports.NotificationListener = functions
    .firestore
    .document('users/{userId}')
    .onUpdate((change, context) => {
      const userId = context.params.userId.toString();
      const eventId = context.eventId;
      console.log('EventId:' + eventId);
      console.log('Change in:' + userId);
      return 200;
    });

以下是来自 GCP 控制台的部署信息(显示触发器):

最后,这是 Cloud Firestore 架构:

我想监控集合中任何“USER”的任何更改:“/user”,因此我使用的是“user/{userId}”。

为什么我更改数据库时没有调用此函数?

编辑 1

关于我的环境的一些信息:

我的整个项目核心都在一个 TypeScript 文件中。我目前有超过 40 个 HTTPS 触发函数在线。

我在我的 TS 文件中添加一个新函数,然后我执行 npm run build 来编译并获取 JS 文件。

最后,我去 Google Cloud Console 创建一个函数并选择“Zip Upload”并上传编译好的 JS 文件(显然,还有获取数据库 URL、身份验证等所需的 JSON 文件)

这种方法非常有效,至少对于 HTTP 触发的 Firestore 函数而言。

现在我对onUpdate 触发器重复了与上述相同的步骤,只是没有选择HTTP 触发器,而是选择了Cloud Firestore 触发器。触发信息可以在上面的截图中找到。

onUpdate 不会在数据库更改时触发。

编辑 2

我的事件触发函数 NotificationListener 与我的其他 40 个 HTTPS 函数一起显示在 firebase 控制台函数列表中。但它没有被调用。

【问题讨论】:

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


    【解决方案1】:

    @doug-stevenson,你的答案似乎消失了,我不知道为什么。

    不管怎样,我找到了它不起作用的原因。

    我的 firebase 数据库位于项目“Placeholder 1”中,而我的 GCP 功能位于项目“Placeholder 2”中。 现在,我可以使用 firabse-functions API 从 GCP 函数(在“Placeholder 2”中)更新“Placeholder 1”数据库,因为我将 DatabaseURL 设置为“Placeholder 1”。

    但是,如果您想监听数据库进行更改,仅将 DatabaseURL 设置为所需的数据库是行不通的。您实际上需要在同一个项目中拥有该功能,否则它无法订阅和监听事件。

    我认为您可以从不同的项目读取/写入数据库有点不一致,但是要监听事件,函数需要在同一个项目中。 或者,也许我遗漏了一些基本的东西,导致我感到困惑。

    【讨论】:

      猜你喜欢
      • 2020-10-15
      • 2019-01-10
      • 1970-01-01
      • 2021-10-05
      • 2020-05-31
      • 2021-03-29
      • 1970-01-01
      • 2019-02-06
      • 2021-02-24
      相关资源
      最近更新 更多