我想每天中午 12:00 重置 Firebase 实时数据库中的特定值。我正在使用 Firebase Cloud Functions 来执行此操作。这是我的代码:
exports.dailyReset = functions.pubsub.schedule('0 0 * * *').onRun((context) => {
exports.resetValue = functions.database.ref('/users/{userId}')
.onWrite((change, context) => {
var ref = change.data.ref;
ref.update({
"daily": 0
});
return ref.update({"daily": 0});
});
return null;
});
经测试脚本,它不起作用。它不会重置我的 Firebase 实时数据库中的值。有人可以告诉我如何解决这个问题吗?
无法使用Functions SDK写入数据库。
functions
只能用于建立在触发事件发生时运行的触发器。
换句话说,
functions.database.ref('/users/{userId}').onWrite()
根本不会写任何东西。
如果您想从 Node.js 程序写入实时数据库,您应该使用 Firebase Admin SDK 写入数据。
index.js
文件中的 Cloud Functions 触发器在运行时必须已知并修复 firebase deploy
。这意味着您无法像您尝试那样从 Cloud Functions 内部动态创建触发器。
动态调度的常用方法有:
但是就您而言,为什么您甚至需要
onWrite
触发器?难道你不能直接导入Admin SDK,使用它来读取所有用户,然后删除它们吗?
对我来说,当计划功能设置为每天 12:00 时,实时数据库不起作用,但如果我每 2 分钟使用一次,那么实时数据库就会更新。
exports.pointFetch = onSchedule("every day 17:30", async (event) => {
await admin.database().ref("USERDATA/").once("value")
.then(function(snapshot) {
const users = snapshot.val();
logger.log(users);
}
使用await,所以它对我有用,我使用Visual Studio代码,Windows 11,NodeJS