[英]How to push new data into firebase realtime database using cloud functions?
[英]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.