首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何从具体的实时数据库路径查询值?

如何从具体的实时数据库路径查询值?
EN

Stack Overflow用户
提问于 2020-03-19 23:31:42
回答 1查看 75关注 0票数 0

我已经编写了一个Firebase Cloud函数,每当某个值(timeTag)发生更改时,该函数会将通知推送到主题:

代码语言:javascript
复制
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);
});

数据库的结构如下:

代码语言:javascript
复制
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 categoryOne

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

提前感谢!

EN

回答 1

Stack Overflow用户

发布于 2020-03-20 00:58:13

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

代码语言:javascript
复制
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通常有更多关于从实时数据库中检索数据的信息。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60760359

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档