web-dev-qa-db-ja.com

Firebase TypeError:未定義のプロパティ「val」を読み取ることができません

通知を送信するためにFirebaseクラウド機能を試しました。私のプロジェクト構造 Database Structure

これが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);
   });

Node.jsにデプロイすると、上記のコードの構成が誤っており、FunctionのLOGに次のように表示されます。

「TypeError:未定義のプロパティ 'val'を読み取れません」。

実際に私がやろうとしていること:新しい子がリアルタイムデータベースに追加されたときに、タイトルと本文で通知ペイロードをトリガーするように、スナップショットのロードからindex.jsに情報を抽出しようとしています。

Androidでは、新しいレコードが追加されたときにリッスンするために、子リスナーを使用します

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

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

しかし、index.jsでは、それを解析できませんでした。私のデータベース構造に応じてindex.jsを修正する方法についてのちょっとしたガイダンスは大歓迎です。 PS- JSでコーディングを行ったことはありません。もっとコンテキストが必要な場合は、喜んで提供します。

10
notTdar

これを変更:

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

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

これに:

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

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

これを確認してください:

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

クラウド関数が変更され、onWriteに2つのパラメーターchangeおよびcontextが追加されました

changeには2つのプロパティbeforeおよびafterがあり、これらはそれぞれDataSnapshotであり、ここにリストされたメソッドを持ちます。

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

34
Peter Haddad