【问题标题】:I am receiving this error while getting notifications from firebase我收到来自 firebase 的通知时收到此错误
【发布时间】:2018-06-03 05:04:34
【问题描述】:
'use strict'
const functions = require('firebase-functions');

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

exports.sendNotification=functions.database.ref('/notifications/{user_id}/{notification_id }').onWrite((change,context) =>{

   const user_id=context.params.user_id;
   const notification_id=context.params.notification_id;

    console.log('The user ID is :',user_id);
    if(!change.after.val()){
        return console.log('A notification has been deleted from database:',notification_id);
    }

    const fromUser=admin.database().ref(`/notifications/${user_id}/${notification_id}`).once('value');

    return fromUser.then(fromUserResult=>{

        const from_user_id=fromUserResult.val().from; 
        console.log('You have new notification from:   : ', from_user_id); 


        const userQuery=admin.database().ref(`users/${from_user_id}/name`).once('value');
        return userQuery.then(userResult=>{

            const userName=userResult.val();
            const deviceToken=admin.database().ref(`/users/${user_id}/device_token`).once('value');

            return deviceToken.then(result =>{

                const token_id=result.val();

                const payload={

                    notification:{
                    title:"Friend Request",
                    body:`${userName} has sent you request`,
                    icon:"default"
                    }
                };    
                return admin.messaging().sendToDevice(token_id, payload);
            }); 
        });
    });
});

TypeError:无法读取 null 的属性“来自” 在 fromUser.then.fromUserResult (/user_code/index.js:22:47) 在 process._tickDomainCallback (internal/process/next_tick.js:135:7)

【问题讨论】:

  • 嗨 Shrey,欢迎来到 Stack Overflow!请将此重写为a Minimal, Complete, and Verifiable example,而不仅仅是代码转储。此外,请用英语解释您迄今为止为解决问题所做的尝试,以及您遇到的问题。谢谢,祝你好运!

标签: firebase firebase-cloud-messaging google-cloud-firestore


【解决方案1】:

您访问名为from 的属性的唯一代码行是:

const from_user_id=fromUserResult.val().from; 

因此,fromUserResult.val() 必须返回 null。

fromUserResult 是一个DataSnapshot 类型的对象。根据val()方法的API文档,如果查询的位置没有数据,它可以返回null。因此,您必须在代码中检查这种情况。

【讨论】:

    【解决方案2】:

    我已经使用此代码发送带有发件人姓名的通知:

    '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_id}')
    .onWrite((data, context) => 
    {
    
        const receiver_user_id = context.params.receiver_user_id;
        const notification_id = context.params.notification_id;
    
        if(!data.after.val())
        {
            console.log('A notification has been deleted :' , notification_id);
            return null;
        }
    
    
        const sender_user_id = admin.database().ref(`/Notifications/${receiver_user_id}/${notification_id}`).once('value');
    
        return sender_user_id.then(fromUserResult => 
        {
            const from_sender_user_id = fromUserResult.val().from;
    
            const userQuery = admin.database().ref(`/Users/${from_sender_user_id}/name`).once('value');
    
            return userQuery.then(userResult => 
            {
                const senderUserName = userResult.val();
                console.log('You have notification from :' , senderUserName);
    
                const DeviceToken = admin.database().ref(`/Users/${receiver_user_id}/device_token`).once('value');
                console.log('Checkpoint2');
                return DeviceToken.then(result => 
                {
                    const token_id = result.val();
    
                    const payload = 
                    {
                        notification:
                        {
                            //from_sender_user_id : from_sender_user_id,
                            title: "New Chat Request",
                            body: `${senderUserName} wants to connect with you`,
                            icon: "default"
    
                        }
                    };
    
                    return admin.messaging().sendToDevice(token_id, payload).then(response => 
                    {
    
                        console.log('This was the notification Feature');
                        return null;
                     }).catch(error => {
                        console.error(error);
                        res.error(500);
                     });
                });
    
            });
    
        });
    });
    

    【讨论】:

      猜你喜欢
      • 2021-09-04
      • 1970-01-01
      • 1970-01-01
      • 2018-06-21
      • 1970-01-01
      • 1970-01-01
      • 2021-12-10
      • 1970-01-01
      • 2021-04-23
      相关资源
      最近更新 更多