web-dev-qa-db-fra.com

Firebase TypeError: Impossible de lire la propriété 'val' de non défini

J'ai essayé la fonction cloud de Firebase pour envoyer une notification. Ma structure de projet Database Structure

et ceci est le index.js,

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

exports.pushNotification = functions.database.ref('/messages').onWrite( event => {
console.log('Push notification event triggered');

    const message = event.data.val();
    const user = event.data.val();
    console.log(message);
    console.log(user);

    const topic = "myTopic";
    const payload = {
        "data": {
            "title": "New Message from " + user,
            "detail":message,
        }
    };

    return admin.messaging().sendToTopic(topic, payload);
   });

Le code ci-dessus est mal configuré, lorsque je déploie dans Node.js, LOG in Function affiche:

"TypeError: Impossible de lire la propriété 'val' de non défini".

En fait, j'essaie de faire: j'essaie d'extraire des informations de la charge d'instantanés dans ce index.js afin que lorsqu'un nouvel enfant soit ajouté à la base de données en temps réel, il devrait déclencher une charge utile de notification avec un titre et un corps.

Dans Android, j'utilise un écouteur enfant, pour écouter lorsqu'un nouvel enregistrement est ajouté

FirebaseDatabase.getInstance().getReference().child("messages")

 OnChildAdded(.....){
 if (dataSnapshot != null) {
                    MessageModel messageModel = dataSnapshot.getValue(MessageModel.class);
                    if (messageModel != null) {
                            // do whatever
                           }
                   }

Mais dans index.js, je ne pouvais pas analyser cela. Un petit conseil sur la façon de fixer index.js en fonction de la structure de ma base de données serait extrêmement apprécié. PS- Je n'ai jamais fait de codage en JS Si vous voulez plus de contexte, je serais ravi de vous le fournir.

10
notTdar

Change ça:

exports.pushNotification = functions.database.ref('/messages').onWrite( event => {

const message = event.data.val();
const user = event.data.val();
});

pour ça:

exports.pushNotification = functions.database.ref('/messages').onWrite(( change,context) => {

const message = change.after.val();
});

S'il te plaît, vérifie cela:

https://firebase.google.com/docs/functions/beta-v1-diff#realtime-database

Les fonctions du cloud ont été modifiées et maintenant onWrite a deux paramètres change et context

change a deux propriétés before et after et chacune d'elles est un DataSnapshot avec les méthodes listées ici:

https://firebase.google.com/docs/reference/admin/node/admin.database.DataSnapshot

34
Peter Haddad