我有一个功能,该功能在我的云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;
});
我想监视对集合“ / 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控制台功能列表中。但是它没有被调用。
答案 0 :(得分:0)
@ doug-stevenson,您的答案似乎消失了,我不确定为什么。
无论如何,我找到了它不起作用的原因。
我的firebase数据库位于项目“占位符1”中,而我的GCP功能位于项目“占位符2”中。 现在,我能够使用firabse-functions API从GCP函数(在“占位符2”中)更新“占位符1”数据库,因为我将DatabaseURL设置为“占位符1”。
但是,如果您想收听数据库中的更改,则仅将DatabaseURL设置为所需的数据库是行不通的。实际上,您实际上需要在同一项目中具有该功能,否则它将无法订阅和侦听事件。
我认为您可以从不同的项目读取/写入数据库有点不一致,但是要侦听事件,功能必须位于同一项目中。 也许我缺少一些基本的东西,这些东西对我造成了困扰。