我已经使用firebase聊天通知云功能,但是当
 通知触发,我在firebase函数中收到此错误
 安慰


  无法读取未定义的属性“当前”
  
  在export.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

最佳答案

在您的代码中,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

关于node.js - 使用Cloud Functions for Firebase的无服务器通知,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/51618621/

10-12 00:13
查看更多