javascript - 如何从特定的实时数据库路径查询值?

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

我编写了一个 Firebase 云函数,只要某个值 (timeTag) 发生更改,它就会向主题推送通知:

const functions = require('firebase-functions');
const admin = require('firebase-admin');
admin.initializeApp(functions.config().firebase);

exports.sendNotification = functions.database.ref('/books/{category}/pages/{page}/timeTag').onUpdate((change, context) => {

    const category = context.params.category;
    const page = context.params.page;

    const categoryName = admin.database().ref('/books/'+`${category}`+'/name/');
    const pageName = admin.database().ref('/books/'+`${category}`+'/pages/'+`${page}`+'/name/');

    const data = change.data;
    console.log(`${categoryName}`)
    console.log(`${pageName}`)

    console.log('Message received');

    const payLoad = {
        notification:{
            title: 'There's an update in '+`${categoryName}`,
            body:  'The page that's been updated is '+`${pageName}`,
            sound: "default"
        }
    };
    return admin.messaging().sendToTopic("all", payLoad);
});

数据库的结构如下:

books:
      {categoryID}
      name: categoryName
      pages:
            {pageID}
            name: pageName

目前,名称是数据库中的完整 URL;例如,https://my-project.firebaseio.com/books/-LxzDYhk-t3LGRGifEyz/name。在本例中,name 是我想要的值的键。这是有问题的,因为 FCM 通知最终是 There's an update in https://my-project.firebaseio.com/books/-LxzDYhk-t3LGRGifEyz/name 而不是 There's an update in类别一

我想要做的是将变量设置为 name 键的值,而不是 URL 本身。我错过了什么?

提前致谢!

最佳答案

您正在创建对数据的引用,但实际上并未获取它。你需要这样的东西:

exports.sendNotification = functions.database.ref('/books/{category}/pages/{page}/timeTag').onUpdate(async (change, context) => {

    // ...

    const categoryNameSnap = await admin.database().ref('/books/'+`${category}`+'/name/').once('value');
    const categoryName = categoryNameSnap.val();
    const pageNameSnap = await admin.database().ref('/books/'+`${category}`+'/pages/'+`${page}`+'/name/').once('value');
    const pageName = pageNameSnap.val();

    // ...
});

请注意,该函数已设为异步(以允许等待 .once('value') 返回的 promise ,并从结果快照中提取值。

These docs了解有关从实时数据库检索数据的更多信息。

关于javascript - 如何从特定的实时数据库路径查询值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60760359/

相关文章:

javascript - 如何使用较少混合的图像路径变量

firebase - 无法在新的 android studio 更新中找到签名报告

firebase - Google 跟踪代码管理器可以在没有 GMS 的设备上运行吗?

javascript - 保护密码客户端 Firebase

java - Firebase 数据库高级查询选项

javascript - 在子更改事件 Firebase 上更新 react native ListView

android - FirebaseRecyclerAdapter、PopulateViewHolder 滚动时多次调用

javascript - 如何捕获 iframe 中下载的文件?

JavaScript ||通过 UL 过滤

javascript - 使用 Protractor 控制鼠标移动