gpt4 book ai didi

angularjs - 将 Firebase 数据库引用作为云函数中的数组返回

转载 作者:太空宇宙 更新时间:2023-11-03 22:50:33 24 4
gpt4 key购买 nike

下面是在我的 AngularJS 范围内以数组形式返回的 Firebase 数据库引用:

var ref = firebase.database().ref("users").child(user.uid).child("week1");
$firebaseArray(ref);

但是,当我尝试在数据库云函数的 index.js 文件中编写相同的代码时,出现错误消息:

ReferenceError: $firebaseArray is not defined at /user_code/index.js:22:18

由于 $firebaseArray 未在 AngularJS 范围之外定义,因此有办法使 Firebase 引用 ref 在我的 index.js Cloud Functions 文件中作为数组返回吗?

下面是数据库的图示:

 users: {
user uid (generated by push) : {
deviceToken : "tokenID",
name : "Display Name"
},
anotherUserID : {
deviceToken : "tokenID",
name : "Display Name"
},
Players: {
player1: John,
Player2: ken,
}

是否可以通过更改 Players 数据库 Node 来触发 users Node 中的函数(针对每个用户):

exports.update = functions.database.ref('/Player')
.onWrite(event=>{
console.log(event.data);
var ref = admin.database().ref('/users/'+ user.uid+ '/week1');
ref.set(10);
return;
});

我的问题是访问每个用户的user.uid(由push()方法创建)。

最佳答案

在 Cloud Functions 中,您可以使用 Firebase Admin SDK保存和检索数据库中的数据。要初始化Admin SDK,您可以使用 environment configuration :

const functions = require('firebase-functions');
const admin = require('firebase-admin');
admin.initializeApp(functions.config().firebase);

然后您可以附加 value listener到您的数据库引用,利用并返回 JavaScript Promise保持函数存活并链接你的逻辑:

const ref = admin.database().ref("/users").child(user.uid).child("week1");

return ref.once("value").then(snapshot => {
const values = snapshot.val();

// Do something with the snapshot
});

此处的 values 变量将被分配该位置处的值数组(请参阅 val() ),因此可以用来代替 $firebaseArray

<小时/>

如果您需要获取触发数据库函数的 Node 的引用,可以使用event函数定义中的参数:

let ref = event.data.ref;

如果您需要获取数据库中触发函数的特定位置,这非常有用。 event.data变量是 DeltaSnapshot数据库函数的实例。

同样,您可以使用event.params来获取数据库触发器定义中指定的任何变量,例如可以获取下面定义中的{uid}使用event.params.uid:

exports.example = functions.database.ref('/users/{uid}')
.onWrite(event => {
const uid = event.params.uid;
// ...
});

您在此处采用的方法取决于您需要函数执行什么工作、如何触发函数以及您需要访问哪些变量或值。

请记住,您的函数也可以使用 Admin SDK 在数据库中的任何位置自由读取和写入数据。

<小时/>

在最新的示例中,很难将 /players 处的 Node 与 /users 匹配,因为没有用户 UID 的值。因此,您需要更改 /players 子 Node 以包含更多数据,例如:

players : {
player1 : {
name: "John",
uid: "anotherUserID"
}
}

然后,您可以使用 event.data.child('uid').val() 从函数中提取此 uid(您的函数由子项触发)该 Node 使用 /players/{playerId}):

exports.update = functions.database.ref('/players/{playerId}')
.onWrite(event=>{
console.log(event.data);
const uid = event.data.child('uid').val();
var ref = admin.database().ref('/users/' + uid + '/week1');
ref.set(10);
return;
});

关于angularjs - 将 Firebase 数据库引用作为云函数中的数组返回,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47395343/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com