【问题标题】:Can't change data in Firebase Realtime Database when using Cloud Functions使用 Cloud Functions 时无法更改 Firebase 实时数据库中的数据
【发布时间】:2020-12-26 18:40:20
【问题描述】:

我想在每天凌晨 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


    【解决方案1】:

    无法使用 Functions SDK 写入数据库。 functions 只能用于建立在触发事件发生时运行的触发器。

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

    如果你想从 nodejs 程序写入实时数据库,你应该使用Firebase Admin SDKwrite data

    【讨论】:

    • 这是否意味着我不能使用日程安排功能?在写入数据库之前我需要它。
    • 您可以使用 Functions SDK 来安排函数的执行 - 在这种情况下,触发事件是时间。但是您必须使用 Admin SDK 来通过实时数据库读取和写入数据。
    • 我已经更新了我的代码。这是处理它的正确方法吗?
    • 如果你有新代码,你真的应该问一个新问题来解释这个问题。当问题随时间不断变化时,堆栈溢出无效。当问题发生变化时,该问题的所有答案都会失效。如果您有关于在 Cloud Functions 中使用 Admin SDK 的新问题,那绝对是一个新问题。
    • 没有。在您尝试使用函数 SDK 之前,它永远无法做到。现在,您已经完全更改了代码,并且您似乎正在尝试按照我的建议使用 Admin SDK,但操作不正确。弗兰克似乎也同意。我将把问题恢复到原来的形式,建议您单独提出新问题。
    【解决方案2】:

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

    动态调度的常用方法有:

    1. 拥有一个定期运行的 Cloud Function,然后执行过去一段时间内的任务。
    2. 如 Doug 在他的博文 How to schedule a Cloud Function to run in the future with Cloud Tasks (to build a Firestore document TTL) 中所述,使用 Cloud Tasks 动态调度 Cloud Functions。

    但在你的情况下,你为什么还需要onWrite 触发器?你不能只import the Admin SDK,那个用户来读取所有用户,然后删除它们吗?

    【讨论】:

    • 我已经使用 Admin SDK 更新了我的代码。这是处理它的正确方法吗?
    • 请不要以某种方式更改您的问题,以使现有答案(在很大程度上)不再有意义,因为这意味着该问题对未来的访问者没有价值。如果我(或道格)的回答有意义并解释了为什么您的方法不起作用以及如何继续前进,您应该支持/接受它们。如果您在实施该方法时遇到问题,请针对新问题提出新问题。
    猜你喜欢
    • 2021-04-04
    • 2019-10-03
    • 2017-09-14
    • 2019-09-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多