在Firebase云功能中为客户端构造对象

时间:2018-01-26 15:02:12

标签: javascript firebase-realtime-database google-cloud-functions

我正在使用Firebase作为后端的简单注册系统。我成功验证用户身份并写入数据库。我有一个具有以下结构的课程和用户索引:

{
  courses: {  // index all the courses available
    key1: {
      title: "Course 1",
      desc: "This is a description string.",
      date: { 2018-01-01 12:00:00Z }
      members: {
        user1: true
        ...
      }
    }, 
    key2 { ... },
  },
  users: {    // track individual user registrations
    user1: {
      key1: true,
      ...
    },
    user2: { ... }
  }
}

我有一个云函数,它监视用户添加课程,并使用相应的courseId构建一个数组,该数组将查看courses节点以返回相应的项目。

exports.listenForUserClasses = functions.database.ref('users/{userId}')
  .onWrite(event => {
    var userCourses = [];
    var ref = functions.database.ref('users/{userId}');
    for(var i=0; i<ref.length; i++) {
      userCourses.push(ref[i])
    }
    console.log(userCourses); // an array of ids under the user's node
  });

所以,我的问题有两个部分:

  1. 如何在加载页面时构建更新的对象?
  2. 如何将函数返回到客户端脚本?

1 个答案:

答案 0 :(得分:0)

问题1:从客户端,您希望获得对数据库路径的引用。然后,您想要调用 child_added 事件。保留在内存中,只要有人添加就会调用它,然后您可以更新UI。

var ref = db.ref("path/to/courses");
ref.on("child_added", function(snapshot, prevChildKey) {
    var newClass = snapshot.val();
});

如果您正在刷新页面,那么您始终可以使用选项并调用once

从数据库路径再次获取数据

问题2:你不是。这被认为是异步功能。如果您想要该函数的响应,那么您将设置HTTP触发器并等待该函数的响应。

相关问题