使用 Cloud Functions 时无法更改 Firebase 实时数据库中的数据

问题描述 投票:0回答:4

我想每天中午 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 实时数据库中的值。有人可以告诉我如何解决这个问题吗?

javascript node.js firebase firebase-realtime-database google-cloud-functions
4个回答
1
投票

无法使用Functions SDK写入数据库。

functions
只能用于建立在触发事件发生时运行的触发器。

换句话说,

functions.database.ref('/users/{userId}').onWrite()
根本不会写任何东西。

如果您想从 Node.js 程序写入实时数据库,您应该使用 Firebase Admin SDK 写入数据


1
投票

index.js
文件中的 Cloud Functions 触发器在运行时必须已知并修复
firebase deploy
。这意味着您无法像您尝试那样从 Cloud Functions 内部动态创建触发器。

动态调度的常用方法有:

  1. 拥有一个定期运行的云函数,然后执行过去一段时间的任务。
  2. 使用云任务动态调度云函数,正如 Doug 在其博客文章如何调度云函数在未来使用云任务运行(以构建 Firestore 文档 TTL)

但是就您而言,为什么您甚至需要

onWrite
触发器?难道你不能直接导入Admin SDK,使用它来读取所有用户,然后删除它们吗?


0
投票

对我来说,当计划功能设置为每天 12:00 时,实时数据库不起作用,但如果我每 2 分钟使用一次,那么实时数据库就会更新。


0
投票
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

© www.soinside.com 2019 - 2024. All rights reserved.