首页 > 解决方案 > 使用 Cloud Functions for Firebase 的无服务器通知

问题描述

我使用了 firebase 聊天通知云功能,但是当通知触发时,我在 firebase 功能控制台中收到此错误

无法读取未定义的属性“当前”

在exports.sendNotification.functions.database.ref.onWrite.event (/user_code/index.js:8:35)

这是我的功能:

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

exports.sendNotification = functions.database.ref('/notifications/messages/{pushId}').onWrite(event => {
    console.log('Push notification event triggered for testing');
    console.log(event);
    const message = event.data.current.val();
    const senderUid = message.from;
    const receiverUid = message.to;
    console.log(receiverUid);
    const promises = [];

    if (senderUid === receiverUid) {
        //if sender is receiver, don't send notification
        promises.push(event.data.current.ref.remove());
        return Promise.all(promises);
    }

    const getInstanceIdPromise = admin.database().ref(`/usersnew/${receiverUid}`).once('value');
    const getSenderUidPromise = admin.auth().getUser(senderUid);

    return Promise.all([getInstanceIdPromise, getSenderUidPromise]).then(results => {
        const instanceId = results[0].val();
        const sender = results[1];
        console.log('notifying ' + receiverUid + ' about ' + message.body + ' from ' + senderUid);

        const payload = {
            notification: {
                title: sender.displayName,
                body: message.body,
                icon: sender.photoURL
            }
        };

         admin.messaging().sendToDevice(instanceId, payload)
            .then(function (response) {
                return console.log("Successfully sent message:", response);
            })
            .catch(function (error) {
                console.log("Error sending message:", error);
            });

            return console.log('This is the notify feature');
    });
});

有谁知道如何解决这个问题?当我记录事件时,它在控制台中显示如下

{ before: 
   DataSnapshot {
 app: 
  FirebaseApp {
    firebaseInternals_: [Object],
    services_: {},
    isDeleted_: false,
    name_: '__admin__',
    options_: [Object],
    INTERNAL: [Object] },
 instance: 'https://teleport-24f52.firebaseio.com',
 _path: '/notifications/messages/-LIlFNd2spo_V1rM-G-f',
 _data: null },
  after: 
   DataSnapshot {
 app: 
  FirebaseApp {
    firebaseInternals_: [Object],
    services_: {},
    isDeleted_: false,
    name_: '__admin__',
    options_: [Object],
    INTERNAL: [Object] },
 instance: 'https://teleport-24f52.firebaseio.com',
 _path: '/notifications/messages/-LIlFNd2spo_V1rM-G-f',
 _data: 
  { body: 'abc',
    dayTimestamp: 1532975400000,
    from: 'q8gtwtwXqbV2DtpsrbYajFsWzSr2',
    negatedTimestamp: -1533056068309,
    timestamp: 1533056068309,
    to: 'Cmpu7mbIENTYyoHZjCjZnbnBMbl2' } } }
10:22:44.625 PM

标签: node.jsfirebasegoogle-cloud-functions

解决方案


在您的代码中,event.data.current应该是event.after.val(),event.after.ref等...

云函数 1.0 中的 API 发生了变化。

阅读: https ://firebase.google.com/docs/functions/database-events#reading_the_previous_value https://firebase.google.com/docs/functions/beta-v1-diff


推荐阅读