Javascript 获取firebase数据库上新添加的子节点的事件
我试图为引用路径上新添加的子节点获取触发器,并仅为新数据获取值。但是Javascript 获取firebase数据库上新添加的子节点的事件,javascript,firebase,firebase-realtime-database,google-cloud-functions,Javascript,Firebase,Firebase Realtime Database,Google Cloud Functions,我试图为引用路径上新添加的子节点获取触发器,并仅为新数据获取值。但是event.data.val返回该引用路径中的所有值 以下是我正在使用的云函数代码: exports.sendOfferNotification = functions.database.ref('/Users/{uid}/offers/New').onWrite(event => { // Only edit data when it is first created. // if (event.data
event.data.val
返回该引用路径中的所有值
以下是我正在使用的云函数代码:
exports.sendOfferNotification = functions.database.ref('/Users/{uid}/offers/New').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;
}
// Grab the current value of what was written to the Realtime Database.
const original = event.data.val();
console.log('New offer', event.params.uid, original);
});
我尝试使用onUpdate
而不是onWrite
,但结果仍然相同。您可以尝试以下方法:
exports.sendOfferNotification =
functions.database.ref('/Users/{uid}/offers/New/{values}') //notice this change
.onWrite(event => {
if (!event.data.exists()){return};
const original = event.params.values; //notice this change
console.log('New offer', event.params.uid, original);
});
你可以试试这个:
exports.sendOfferNotification =
functions.database.ref('/Users/{uid}/offers/New/{values}') //notice this change
.onWrite(event => {
if (!event.data.exists()){return};
const original = event.params.values; //notice this change
console.log('New offer', event.params.uid, original);
});
在New的嵌套级别上使用
onCreate()
解决了这个问题/
exports.sendNotificationForImportantOffers = functions.database.ref('/Users/{uid}/offers/New/Important/{values}').onCreate(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;
}
// Grab the current value of what was written to the Realtime Database.
const original = event.data.val();
console.log('New offer', event.params.uid, original);
});
最初,我尝试使用一个函数来侦听New/path下所有嵌套级别上的更改,但现在我必须使用
onCreate()
单独监视每个子级别的触发器,该命令只返回新添加的子级。在New/path的嵌套级别上使用onCreate()
解决了这个问题/
exports.sendNotificationForImportantOffers = functions.database.ref('/Users/{uid}/offers/New/Important/{values}').onCreate(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;
}
// Grab the current value of what was written to the Realtime Database.
const original = event.data.val();
console.log('New offer', event.params.uid, original);
});
最初,我尝试使用一个函数来侦听New/path下所有嵌套级别上的更改,但现在我必须使用
onCreate()
单独监视每个子级别的触发器,它只返回新添加的子级。onWrite()数据库触发器将始终在您在ref()中指定的位置接收所有数据,只要该位置下的任何内容发生更改。是的,我同意,但onUpdate()的行为也相同。你知道如何只获取新添加的数据吗?例如,如果/New下已经有4个报价,并且添加了第5个报价时,我只想检索第5个报价的数据,那么每当该位置下的任何内容发生更改时,onWrite()数据库触发器将始终在您在ref()中指定的位置接收所有数据。是的,我同意,但onUpdate()的行为也相同。你知道如何只获取新添加的数据吗?例如,如果/New下已经有4个报价,当添加第5个报价时,我只想检索第5个报价的数据。您的{values}方法有帮助,但我还有一个子层,需要使用onCreate()而不是onWrite()。所以,我把我的答案贴在下面。这太完美了。如果您正在将数据推送到节点中,并且只想获得新节点的结果,那么请执行J.Doe正在执行的操作。。。您只需使用onWrite和{values},然后访问在const-original中找到的新添加的push记录即可。您对{values}的方法有所帮助,但我还有一个子层,需要使用onCreate()而不是onWrite()。所以,我把我的答案贴在下面。这太完美了。如果您正在将数据推送到节点中,并且只想获得新节点的结果,那么请执行J.Doe正在执行的操作。。。您只需使用onWrite和{values},然后访问在const-original中找到的新添加的push记录。