Koh*_*Koh 10 javascript firebase google-cloud-functions
我有以下函数来监听数据库触发器的onWrite事件,如下所示:
exports.sendNotifications = functions.database.ref('/events/{eventId}/registered')
.onWrite(event => {
...
});
Run Code Online (Sandbox Code Playgroud)
无论是删除还是添加节点,都会调用上述函数.如何检查onWrite事件是否为该特定节点的"删除"事件或"添加"事件,以便仅在"添加"事件时才调用此函数.
小智 13
如果您只想为添加事件触发此函数,则onCreate()触发器将是可行的方法。
但是,您还可以onWrite()使用对象的before和after属性来检测它是否是添加事件Change:
exports.sendNotifications = functions.database.ref('/events/{eventId}/registered')
.onWrite((change, context) => {
if (change.before.exists()) {
//update event
return null;
} else if (!change.after.exists()) {
//delete event
return null;
} else {
//add event
//do stuff
}
});
Run Code Online (Sandbox Code Playgroud)
在文档中查找更多详细信息:
https://firebase.google.com/docs/functions/database-events#handle_event_data
onWrite 将在创建、更新或删除文档时触发。以下是如何使用 Firestore 云功能检查每个条件。
if(event.after.data == undefined){
// Deleted: data before but no data after
console.log('Deleted');
}
if(event.before.data && event.after.data){
// Updated: data before and data after
console.log('Update');
}
if(!event.before.data && event.after.data){
// Created: no data before but data after
console.log('Created');
}
Run Code Online (Sandbox Code Playgroud)
将event传递到函数既包含以前的数据和触发功能的位置的新数据.通过这两条信息,您可以推断出它是新写入,更新还是删除.
Run Code Online (Sandbox Code Playgroud)exports.makeUppercase = functions.database.ref('/messages/{pushId}/original') .onWrite(event => { // Only edit data when it is first created. if (event.data.previous.exists()) { return; } // Exit when the data is deleted. if (!event.data.exists()) { return; }
自从这里的大多数答案以来,API 似乎已经发生了变化。发布当前(2021 年 5 月)对我有用的版本。
无论是Firestore还是实时数据库,在这两种情况下,onWrite钩子都接受change对象,该对象只是一个包含两个文档快照的对象:before和after。
可以使用exists(这是getter属性,而不是函数)来检测创建或删除。
另外,如果您需要处理的只是创建,那么最好使用onCreate事件处理程序。它仅获取创建文档的快照来代替对象change。
// EITHER
exports.sendNotifications = functions.database.ref('/events/{eventId}/registered')
.onWrite((change, context) => {
// Change contains before and after documents snapshots
const { before, after } = change;
// Each snapshot knows if it exists.
if (!before.exists) {
const newEvent = after.data();
console.log('Event was created', newEvent);
return;
}
if (!after.exists) {
const oldEvent = before.data();
console.log('Event was deleted', oldEvent);
return;
}
console.log('Event changed', { from: before.data(), to: after.data() });
});
// OR
exports.sendNotifications = functions.database.ref('/events/{eventId}/registered')
.onCreate((snapshot, context) => {
const newEvent = snapshot.data();
console.log('Event was created', newEvent);
});
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3422 次 |
| 最近记录: |