如何从另一个节点事件触发的`onWrite`函数中访问Google Cloud Function中的特定节点?

时间:2018-05-01 16:45:22

标签: javascript node.js firebase firebase-realtime-database google-cloud-functions

创建新节点时,我想创建相同的数据并将其推送到不同的节点。

Door / 111111111111 / ins 节点是我将新数据推送到的节点:

root: { 
  doors: {
    111111111111: {
       MACaddress: "111111111111",
       inRoom: "-LBMH_8KHf_N9CvLqhzU",
       ins: {
          // I am creating several "key: pair"s here, something like:
          1525104151100: true,
          1525104151183: true,
       }
    }
  },
  rooms: {
    -LBMH_8KHf_N9CvLqhzU: {
      ins: {
        // I want the function to clone the same data here:
        1525104151100: true,
        1525104151183: true,
      }
    }
  }

这是我的函数,它抛出一个错误:

  

TypeError:change.before.ref.parent.child(...)。val不是函数

代码:

exports.updateRoom = functions.database.ref('/doors/{MACaddress}/ins').onWrite((change, context) => {
    const beforeData = change.before.val(); // data before the write
    console.log(beforeData); // all good so far
    const afterData = change.after.val(); // data after the write
    console.log(afterData); // all good so far

    const roomPushKey = change.before.ref.parent.child('/inRoom').val(); // ERROR
    console.log(roomPushKey);

    return change.after.ref.parent.parent.parent.child('/rooms').child(roomPushKey).child('/ins').set(afterData);
});

我的道路有什么问题?如何让它更新其他节点?

1 个答案:

答案 0 :(得分:2)

child()Reference上的一个返回另一个Reference对象的方法。引用没有val()方法,因为它不包含任何数据。这只是一个参考。

要获取数据库触发器位置之外的数据,您需要为其查询实时数据库。使用once()方法。这是非常常见的,您应该能够使用示例和文档来确定您需要做什么。