firebase - 在 Firebase 函数中为实时数据库使用 onWrite 触发器
问题描述
我使用 dart 和 firebase 后端设计了一个颤振应用程序。我想在用户创建、删除或更新数据库中的任何内容时触发。我了解onCreate、onRemoved和onUpdate方法。我在 firebase 云函数中编写了一个 javascript 代码。我需要在触发发生时发送通知。我不想使用 3 个不同的触发器。我只想使用 onWrite 触发器。
这是我的数据库。
有四个部门,分别称为comp、civil、lect和mech。我想在单个 onWrite 触发器中发生数据库更改时触发!
我的第一个问题是,我想区分它是从onWrite触发器创建、删除还是更新。我知道它将触发所有 3 个事件。但是我该如何区分呢?
这是我的 onCreate 代码...
exports.noticeAddedComp = functions.database.ref('main/notices/comp/{id}').onCreate( async evt => {
var token = ['dxnfr3dq6_Y:APA91bHavtoP62l296qzVoBhzQJbMFA']
const payload = {
notification:{
title : 'Message from Cloud',
body : 'This is your body',
sound : 'default'
},
data:{
message : 'Thi is new Push',
click_action : 'FLUTTER_NOTIFICATION_CLICK',
}
};
await admin.messaging().sendToDevice(token,payload);
});
上面的代码正在工作。但它适用于 onCreate。
我的第二个问题是,我需要为四个部门编写四个 onWrite 触发代码吗?
解决方案
您可以使用change.before
和change.after
属性来确定节点是在onWrite
处理程序中创建、删除还是更新:
exports.noticeAddedComp = functions.database.ref('main/notices/comp/{id}')
.onWrite( async (change, context) => {
if (!change.before.exists()) console.log("New node: "+change.after.key);
if (!change.after.exists()) console.log("Deleted node: "+change.before.key);
if (change.before.exists() && change.after.exists()) console.log("Updated node: "+change.after.key)
...
});
您可以通过在其路径中包含另一个参数来一次将云函数附加到所有部门:
exports.noticeAddedComp = functions.database.ref('main/notices/{dept}/{id}')
.onWrite( async (change, context) => {
console.log("Triggered for department: "+context.params.dept);
...
})
推荐阅读
- reactjs - Draft.js - createWithContent 或 convertFromRaw 抛出错误
- java - Artifactory REST API 拒绝有效的 JSON
- haskell - 如何解释 Haskell 中的关联性/优先级
- reactjs - 如何在 axios.get 中添加正文?
- linux - Bash - 多行 Whiptail 反标题
- python - 避免使用双引号将 pandas.to_sql 写入表(PostgreSQL 数据库)
- c++ - 如何在 C++ 中使用双链表实现迭代器前后方法?
- parsing - 使用改造解析泛型类型列表
- git - 命令行上的 Git 行为非常奇怪
- python - 以python方式循环遍历子字符串