javascript - Firebase 获取特定 key

标签 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)上监听相同的事件,并且 future 可能有更多地点

所以我的问题是:有没有一种方法可以在日志写入任何位置时获取位置键,以便我可以将其发送到其他函数

最佳答案

要监听所有位置,在触发函数的路径中使用一个参数:

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 .

关于javascript - Firebase 获取特定 key ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54774206/

相关文章:

javascript - 将变量发送到另一个 HTML 文件

javascript - 如何通过乘法值的下拉列表禁用输入

reactjs - 函数 CollectionReference.add() 要求其第一个参数为 object 类型,但它是 : undefined

android - 关于将 Flutter 应用发布到 Play 商店的问题

ios - 在新的 Firebase 4.0 版本中获取数据库引用

javascript - 在 javascript 中读取 asp HiddenField

javascript - ExtJS 现代 : Painted Event is not triggered in iOS 13. 4+ WKWebview

android - 如何通过邮件 FIREBASE 判断用户是否更改了密码

javascript - 注册 Firebase Listener 而不调用它?

swift 火力地堡 : loop through data and only start the new loop if the old one has finished loading