使用nodejs TypeError在firebase中获取子级的值

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用nodejs TypeError在firebase中获取子级的值相关的知识,希望对你有一定的参考价值。

我想知道是否有人可以告诉我我做错了什么。我正在尝试编写一个Firebase函数来发送通知。那部分起作用,但是我试图获得一个特定孩子的价值。但是,我不断收到以下错误消息:“ TypeError:无法读取未定义的属性'child'”

这是我的服务器端代码:

'use strict'

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

exports.sendNotification = functions.database.ref('/notifications/{receiver_user_id}/{notification_key}').onWrite((data, context)=>{
    const receiver_user_id = context.params.receiver_user_id;
    const notification_key = context.params.notification_key;
    console.log('We have a notification to send to : ', receiver_user_id);
    // Grab the current value of what was written to the Realtime Database.
    const original = data.after.val();
    console.log('Uppercasing', context.params.notification_key, original);
    const sender_fullname = snapshot.child('notifying_user_fullname').val();
    console.log('fullname value: ', sender_fullname);

    if(!data.after.val()){
        console.log('A notification has been deleted: ', notification_key);
        return null;
    }

    const DeviceToken = admin.database().ref(`/tokens/${receiver_user_id}/device_token`).once('value');

    return DeviceToken.then(result=>{
        const token_id = result.val();
        const payload = {
            notification: {
                title: sender_fullname,
                body: "You have a new message!",
                icon: "default"
            }
        };
        return admin.messaging().sendToDevice(token_id, payload).then(response=>{
            console.log('Message has been sent');
        });
    });

});

快照可以打印出来。当我删除快照和sender_fullname常量时,通知就可以了。但是,就像我说的那样,以这种方式执行代码时,我不断收到TypeError消息。有谁知道如何在实时数据库中的某个位置获取孩子的价值。如果有帮助,则数据快照如下所示:

enter image description here

[如果有人可以提供帮助,那将很好。预先谢谢你

答案

您有一个从未定义的变量snapshot,至少不是您在此处显示的变量。这是您使用它的地方:

const sender_fullname = snapshot.child('notifying_user_fullname').val();

尝试在未定义的对象上调用方法会给您该错误消息。

以上是关于使用nodejs TypeError在firebase中获取子级的值的主要内容,如果未能解决你的问题,请参考以下文章

TypeError:无法在nodejs中读取未定义的属性“email”

NodeJS Mongoose record.save TypeError

无法在 nodeJS 中对用户进行身份验证:TypeError:无法使用“in”运算符在 fs 中搜索“用户名”

如何解决 NodeJS 中的“TypeError:将循环结构转换为 JSON”

TypeError:无法读取未定义的nodejs请求http的属性'0'

NodeJs 使用 ExpressJs : TypeError: string is not a function at Function.app.render