Firebase获取特定密钥

时间:2019-02-19 20:11:12

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

我有一个具有以下结构的realtime-database

-- test-b7a6b
    -- locations
        -- 0
            -- logs
                -- alarm_2a330b56-c1b8-4720-902b-df89b82ae13a                
                ...
            -- devices
            -- deviceTokens
        -- 1
        -- 2

我正在使用firebase-functions,该日志在写入新日志时会执行

let functions = require('firebase-functions');
let admin = require('firebase-admin');

admin.initializeApp(functions.config().firebase);

exports.sendPush = functions.database.ref('/locations/0/logs/{devicelogs}/{logs}').onWrite((change, context) => {
  let logsData = change.after.val();
  loadUsers();
  getBody(deviceTypeId);
  //managing the results
});

我还有其他功能要与具有新log的位置引用到同一位置

function loadUsers() {
    let dbRef = admin.database().ref('/locations/0/deviceTokens');
    //managing users
}

function getBody(deviceTypeId) {
  let devicesDB = admin.database().ref('/locations/0/devices');
  //managing devices
}  

在所有3个函数上手动放置位置使其工作正常,但我不知道如何使其在所有位置( 0、1和2 )上侦听同一事件,并且将来可能会有更多地点

所以我的问题:当日志写入任何位置时,有什么方法可以获取位置键,以便将其发送给其他功能

1 个答案:

答案 0 :(得分:2)

要收听所有位置,请在触发该功能的路径中使用参数:

exports.sendPush = functions.database.ref('/locations/{location}/logs/{devicelogs}/{logs}').onWrite((change, context) => {

然后您可以从context.params获取参数并将其传递给

exports.sendPush = functions.database.ref('/locations/{location}/logs/{devicelogs}/{logs}').onWrite((change, context) => {
  let logsData = change.after.val();
  loadUsers(context.params.location);
  getBody(deviceTypeId);
  //managing the results
});

另请参阅Cloud Functions for Firebase documentation on handling event data