如何了解Firebase云端function中的新数据?

您如何知道数据是否未更改以及Firebase Cloudfunction中的新增function? 我已经尝试了几个不同的选项来标记,如果数据刚刚更改,那么我不会发送推送通知。 另外我试图从快照获取_newData和_data子节点来比较数字,如果__newData更大,那么这是一个新的logging,但它没有工作。 请告诉我如何做到这一点。

示例代码片段。

module.exports = functions.database.ref('/userListEvents/{userID}') .onWrite(event => { const snapshot = event.data; if (event.data.val() && !event.data.previous.val()) { console.log('send push notification'); } else if (snapshot._data) { console.log('send push notification'); } else { return console.log('data was removed'); }; } 

参考

 functions.database.ref('/cards/{cardID}/interestedUsers') .onWrite(event => { 

更新:这个选项对我不起作用,因为如果我这样做,例如functions.database.ref ('/ userListEvents / {userID} / {eventID}') ,那么报告错误是该字段不能为空。

我尝试了,但没有得到好的结果。

 if (event.data.val() && !event.data.previous.val()) { console.log('send push notification'); } else if (event.data.val() && event.data.previous.val()) { const newData = event.data.val(); const previousData = event.data.previous.val(); console.log('newData', newData, 'previousData', previousData); const newDataKeys = Object.keys(newData); const previousDataKeys = Object.keys(previousData); if (newDataKeys.length > previousDataKeys.length) { console.log('send push', newDataKeys.length, previousDataKeys.length); } else { return console.log('just update data', newDataKeys.length, previousDataKeys.length); } } else { return console.log('removed data') } 

您需要使用event.data.current.val()而不是event.data.val()进行比较。 例:

 exports.detectChange = functions.database.ref('/userListEvents/{userID}') .onWrite(event => { const crnt = event.data.current; const prev = event.data.previous; if (crnt.val() && !prev.val()) { // value created console.log('Created: send push notification'); } else if (!crnt.val() && prev.val()) { // value removed console.log('Removed: send push notification'); } else { // value updated console.log('Updated'); } }); 

检查下面的例子:

 exports.Observedata = functions.database.ref("/location/{id}").onWrite((event) => { const id = event.params.id; const snap = event.data; if (!snap.exists() && snap.previous.exists()) { //deleted data } else if (snap.exists() && !snap.previous.exists()) { //newly addded data } else if (!snap.child("isactive").val() && snap.child("isactive").changed()) { //if the node isactive changed its value from false to true } });