我在firebase实时数据库“
zSearchingUsers
”中有一个节点,其中所有搜索用户在开始搜索时都会进入哪个用户端应用程序,它们看起来如图所示:
现在我想做的是定义一个 firebase 函数(javascript),它将监听
zSearchingUsers
节点,每当有 2 个或更多用户到来时,它就会选择其中一对并将它们放入 zPairedUsers
中,格式如下:
任何帮助将不胜感激,谢谢!
更新 这是我2020年的问题,当时我不知道如何编写firebase函数,但现在我知道了,所以我发布了我的问题的答案,希望对其他人有帮助。 这是实现此功能的 Cloud Function 的 TypeScript 版本:
import * as functions from 'firebase-functions';
import * as admin from 'firebase-admin';
admin.initializeApp();
export const pairUsers = functions.database.ref('/zSearchingUsers')
.onUpdate(async (change, context) => {
const snapshot = change.after;
const users = snapshot.val();
// Check if there are at least 2 users
if (users && Object.keys(users).length >= 2) {
// Get an array of user IDs
const userIds = Object.keys(users);
// Pair the first two users
const user1Id = userIds[0];
const user2Id = userIds[1];
// Create a new object with the paired users
const pairedUsers: { [key: string]: any } = {
[user1Id]: users[user1Id],
[user2Id]: users[user2Id]
};
// Save the paired users to zPairedUsers
const pairedUsersRef = admin.database().ref('/zPairedUsers');
await pairedUsersRef.set(pairedUsers);
// Remove the paired users from zSearchingUsers
await snapshot.ref.update({
[user1Id]: null,
[user2Id]: null
});
console.log('Users paired:', user1Id, user2Id);
} else {
console.log('Not enough users to pair.');
}
return null;
});
在此 TypeScript 版本的云函数中:
functions
导入 firebase-functions
,从 admin
导入 firebase-admin
。pairUsers
监听/zSearchingUsers
节点上的更新。/zPairedUsers
节点。/zSearchingUsers
节点中删除。另请确保使用 Firebase CLI 将此 TypeScript Cloud Function 部署到您的 Firebase 项目。如果您尚未在 Firebase 项目中设置 TypeScript,则需要首先执行此操作:
安装 TypeScript:
npm install -g typescript
在 Firebase Functions 文件夹中设置 TypeScript:
cd functions
tsc --init
安装 Firebase 和 Firebase Admin SDK 类型:
npm install --save @types/firebase @types/firebase-admin
TypeScript 设置完成后,您就可以部署该功能了:
firebase deploy --only functions
有关使用
Firebase functions
触发 Realtime Database
的更多信息,请点击此链接。