首页 > 解决方案 > 推送通知的“TypeError:无法读取未定义的属性 'val'”

问题描述

嗨,我对此很陌生。

这是我在 Firebase 上的数据树:

我正在尝试访问“目击”下新创建的节点,这是我的云功能代码。

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

exports.announceSighting = functions.database
    .ref('sightings/{sightingId}')
    .onCreate(event => {
        const sighting = event.data.val()
        sendNotification(sighting)
    })

function sendNotification(sighting) {
    const name = sighting.name

    const payload = {
        notification: {
            title: 'New Sighting Available',
            body: 'Hi',
            // body: title + name,
            sound: 'default'
        }
    }
    console.log(payload)

const topic = "Sightings"
admin.messaging().sendToTopic(topic, payload)

}

.ref('sightings/{sightingId}') 据我了解,我正在通过sightingId收听新节点,这是我从教程中解释的,因为父母的名字是sightings,但我不知道我应该放什么来表明我正在寻找孩子目击

这是我得到的错误:

非常感谢您的帮助。

标签: javascriptfirebasefirebase-realtime-databasegoogle-cloud-functions

解决方案


根据文档,您应该使用快照来获取创建对象的数据,如下所示:

exports.announceSighting = functions.database.ref('/sightings/{sightingId}')
    .onCreate((snapshot, context) => {
      const sighting = snapshot.val();
      sendNotification(sighting)
    });

推荐阅读