从GCP控制台部署Cloud Firestore触发功能

时间:2020-07-19 18:14:42

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

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

我没有使用Firestore CLI部署该功能,而是使用GCP控制台部署了它。

功能如下:

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控制台的部署信息(显示触发器): Deployment Information.

最后,这是Cloud Firestore模式: Firestore Schema

我想监视对集合“ / user”中任何“ USER”的任何更改,因此我正在使用“ user / {userId}”。

为什么在我更改数据库时未调用此函数?

编辑1

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

我在TypeScript文件中拥有整个项目核心。我有40多个HTTPS触发功能,这些功能当前在线。

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

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

这种方法至少在HTTP触发的Firestore函数中效果很好。

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

数据库更新未触发onUpdate。

编辑2

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

1 个答案:

答案 0 :(得分:0)

@ doug-stevenson,您的答案似乎消失了,我不确定为什么。

无论如何,我找到了它不起作用的原因。

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

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

我认为您可以从不同的项目读取/写入数据库有点不一致,但是要侦听事件,功能必须位于同一项目中。 也许我缺少一些基本的东西,这些东西对我造成了困扰。