gpt4 book ai didi

node.js - 仅当关键存在时更新 firebase 云功能

转载 作者:太空宇宙 更新时间:2023-11-04 00:07:42 25 4
gpt4 key购买 nike

我有一个函数可以计算所有将要参加事件的成员。

我有 Registered_people 键来计算有多少用户参加了此事件。当有人将自己添加到/registrations/approved 链接时,此 key 将更新 +1 或 -1。

这非常有效。请参阅下面的方法。

exports.reservation = functions.database.ref('/agenda/activitys/{year}/{month}/{day}/{time}/{event}/registrations/approved/{key}').onWrite((event) => {
var collectionRef = event.data.adminRef.parent.parent;
var countRef = collectionRef.parent.child('registered_people');

console.log("Fired of reservation watcher");

return countRef.transaction(function(current) {
if (event.data.exists() && !event.data.previous.exists()) {
return (current || 0) + 1;
}
else if (!event.data.exists() && event.data.previous.exists()) {
return (current || 0) - 1;
}
});
});

但我的问题是当管理员删除事件时。 Url /agenda/activitys/{year}/{month}/{day}/{time}/{event} 被删除,上面定义的方法被触发并将数据再次写入该 url。当管理员删除事件时,如何防止此方法写入任何内容?

这段代码不起作用:

if (event.data.previous.exists()) {
return;
}

因为当用户想要退出事件时,必须更新 Registered_people。使用上面定义的代码,删除不再起作用。所以我需要检查该事件是否被删除。

最佳答案

首先,您正在运行旧版本的功能和管理,请更新以确保您的 firebase-functions 和 firebase-admin 已更新:

在您的函数文件夹中运行:

npm install firebase-functions@latest --save 
npm install firebase-admin@latest --save

那么你的代码应该如下所示:

exports.reservation = functions.database.ref('/agenda/activitys/{year}/{month}/{day}/{time}/{event}/registrations/approved/{key}').onWrite((change, context) => {
var collectionRef = change.after.ref.parent.parent;
var countRef = collectionRef.parent.child('registered_people');
let increment;
if (change.after.exists() && !change.before.exists()) {
increment = 1;
} else if (!change.after.exists() && change.before.exists()) {
return null;
} else {
return null;
}
return countRef.transaction((current) => {
return (current || 0) + increment;
}).then(() => {
return console.log('Counter updated.');
});
});

关于node.js - 仅当关键存在时更新 firebase 云功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51477825/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com