繁体   English   中英

如何在使用 Cloud Functions 时使用 Firebase Admin SDK 更改 Firebase 实时数据库中的数据?

[英]How do I use Firebase Admin SDK to change data in Firebase Realtime Database while using Cloud Functions?

我想每天凌晨 12:00 重置我的 Firebase 实时数据库中的特定值。 为此,我使用 Firebase Admin SDK 来更改 Firebase 实时数据库和云函数中的数据,每天 12 点触发更改。

这是我的 Firebase 实时数据库的示例结构:

{
  "users": {
    "fa54487d9cbb4214b00db80e2118e4e6": {
      "daily": 10
    }
  }
}

这是我的index.js中的代码:

// The Cloud Functions for Firebase SDK to create Cloud Functions and setup triggers.
var functions = require('firebase-functions');

// The Firebase Admin SDK to access Cloud Firestore.
var admin = require('firebase-admin');

// Fetch the service account key JSON file contents
var serviceAccount = require("serviceAccountKey.json");

// Initialize the app with a service account, granting admin privileges
admin.initializeApp({
  credential: admin.credential.cert(serviceAccount),
  databaseURL: "https://databaseName.firebaseio.com"
});

// As an admin, the app has access to read and write all data, regardless of Security Rules
var db = admin.database();
var ref = db.ref("users");

// Reset today GHG emissions at 12:00 AM everyday
exports.dailyReset = functions.pubsub.schedule('0 0 * * *').onRun((context) => {
    usersRef.child("{userId}").set({
      daily: 0
    });
});

部署错误:

:函数[dailyReset(us-central1)]。 部署错误。

Function 加载用户代码失败。 这可能是由于用户代码中的错误。 错误消息:错误:请检查您的 function 日志以查看错误原因: https://cloud.google.com/functions/docs/monitoring/logging#viewing_logs 其他故障排除文档可在https://cloud.google.com/functions/docs/troubleshooting#logging找到。 请访问https://cloud.google.com/functions/docs/troubleshooting以获取深入的故障排除文档。

Firebase 控制台功能日志:

错误:function 终止。 建议的操作:检查日志以了解终止原因。

其他故障排除文档可在https://cloud.google.com/functions/docs/troubleshooting#logging Function 无法初始化。

{"@type":"type.googleapis.com/google.cloud.audit.AuditLog","status":{"code":3,"message":"函数加载用户代码失败。这可能是由于用户代码中的错误。

错误消息:错误:请检查您的 function 日志以查看错误原因: https://cloud.google.com/functions/docs/monitoring/logging#viewing_logs

其他故障排除文档可在https://cloud.google.com/functions/docs/troubleshooting#logging找到。

当我使用firebase deploy时,脚本不会部署,因为我的 function 给了我一个错误。 有人可以告诉我如何修复我的代码吗?

这不起作用:

exports.dailyReset = functions.pubsub.schedule('0 0 * * *').onRun((context) => {
    usersRef.child("{userId}").set({
      daily: 0
    });
});

这里没有任何东西可以解释该路径中的{userId} ,因此数据库会更新文字路径"/users/{userId}" ,这不是您想要的。

如果您知道要更新的用户 ID,则应在路径中使用该值:

exports.dailyReset = functions.pubsub.schedule('0 0 * * *').onRun((context) => {
    let usersRef = admin.database().ref("users");
    usersRef.child("theActualUserIdYouWantToUpdate").set({
      daily: 0
    });
});

如果您不知道要更新哪个用户 ID, 则需要查询数据库来确定。


如果要遍历所有用户,可以执行以下操作:

exports.dailyReset = functions.pubsub.schedule('0 0 * * *').onRun((context) => {
    return usersRef.once("value").then((snapshot) => {
        let updates = {};
        snapshot.forEach((userSnapshot) => {
            updates[userSnapshot.key+"/daily"] = 0
        });
        return usersRef.update(updates);
    });
});

如果您不熟悉 JavaScript 或与其中的实时数据库进行交互,Firebase 的 Cloud Functions 并不是学习它的最佳方式。 我建议首先阅读Web 开发人员的 Firebase 文档和/或获取Firebase 代码实验室 ZC6E1930B285049DA3C 开发人员的 Firebase 代码实验室。 它们涵盖了许多基本的 JavaScript、Web 和 Firebase 交互。 您还可以在本地 Node.js 进程中使用管理员 SDK,该进程可以使用本地调试器进行调试。 在这些之后,您也将能够更好地为 Cloud Functions 编写代码。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM