firebase - 从 GCP Console 部署 Cloud Firestore 触发器功能
问题描述
我有一个在我的云 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;
});
我想监视集合中任何“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 控制台函数列表中。但它没有被调用。
解决方案
@doug-stevenson,您的答案似乎消失了,我不知道为什么。
无论如何,我找到了它不起作用的原因。
我的 firebase 数据库位于项目“Placeholder 1”中,而我的 GCP 功能位于项目“Placeholder 2”中。现在,我可以使用 firabse-functions API 从 GCP 函数(在“Placeholder 2”中)更新“Placeholder 1”数据库,因为我将 DatabaseURL 设置为“Placeholder 1”。
但是,如果您想监听数据库进行更改,仅将 DatabaseURL 设置为所需的数据库是行不通的。您实际上需要在同一个项目中拥有该功能,否则它无法订阅和侦听事件。
我认为您可以从不同的项目读取/写入数据库有点不一致,但是要监听事件,函数需要在同一个项目中。或者,也许我错过了一些基本的东西,导致我感到困惑。
推荐阅读
- javascript - 如何在单击 href 时重定向到 URL?
- java - 从数组列表创建多维数组
- tensorflow - 如何在默认图中获取张量
- java - 在 Spark-cluster 上。是否有一个参数可以控制 spark 作业的最短运行时间
- active-directory - 如何从 OU 内的组中获取用户帐户?
- android - 尝试在 libgdx Admob 实现中调用空对象引用上的接口方法
- qt - Qt - 如何使一个线程用于加载纹理和另一个线程用于运行paintGL()
- c++ - Cassandra C++ 驱动程序如何使用 zlib 库?
- java - 过滤数组列表
- r - 使用混合效应模型时的收敛警告