Получение ошибки для функций firebase - «Ошибка типа: невозможно прочитать свойство« из »неопределенного ...» - PullRequest
0 голосов
/ 20 мая 2019

Я занимаюсь разработкой приложений для Android и использую функции Firebase для отправки уведомлений через облачные сообщения Firebase.У меня мало знаний о функциях Firebase.Я пробовал несколько учебных пособий.

Я получаю сообщение об ошибке в журналах функций Firebase, как показано ниже:

ссылка на изображение ... изображение ошибки

Ошибка типа:Невозможно прочитать свойство "from" из неопределенного в admin.firestore.collection.doc.collection.doc.get.then.queryResult (/user_code/index.js:14:42) в process._tickDomainCallback (internal / process / next_tick.js).: 135: 7)

Если вам известны решения, отредактируйте мой код и вставьте в качестве ответа.Заранее спасибо.

Мой индекс, как показано ниже

      'use-strict'
const functions = require('firebase-functions');
const admin = require('firebase-admin');
admin.initializeApp();
exports.sendNotification = functions.firestore.document("Users/{user_id}/Notifications/{notification_id}").onWrite((change,context)=> {

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

 console.log("USER ID : "+user_id+" NOTIFICATION ID "+notification_id);

 return admin.firestore().collection("Users").doc(user_id).collection("Notifications").doc(notification_id).get().then(queryResult =>{

  const from_user_id = queryResult.data().from;
  const type = queryResult.data().type;

  console.log("FROM_USER ID : "+from_user_id+" TYPE "+type);

  const from_data = admin.firestore().collection("Users").doc(from_user_id).get();
  const to_data = admin.firestore().collection("Users").doc(user_id).get();


  return Promise.all([from_data, to_data]).then(result => {

   const from_name = result[0].data().name;
   const to_name = result[1].data().name;
   const token_id = result[1].data().token_id;

   const payload = {
    notification: {
     tag : from_user_id+"Follow",
     title : "Request From : "+from_name,
     icon  : "follow_icon_for_notification",
     color : "white",
     sound : "TYPE_NOTIFICATION",
     body  : "Click here to accept Follow Request.",
     click_action:"jony.Activities.ONFOLLOWREQUESTRECEIVED"
    },
    data : {
     message : "Click here to accept Follow Request.",
     user_id : from_user_id
    }
   };

   return admin.messaging().sendToDevice(token_id, payload).then(result => {

    var db = admin.firestore();

    const FieldValue = require('firebase-admin').firestore.FieldValue;

    var notificationRef = db.collection("Users").doc(user_id).collection("Notifications").doc(notification_id).delete();

    return console.log("Follow notification sent");

   });

  });

 });

}); 

1 Ответ

0 голосов
/ 21 мая 2019

Вы бы использовали change.after.data()?

См. https://firebase.google.com/docs/functions/firestore-events.

"use-strict";
const functions = require("firebase-functions");
const admin = require("firebase-admin");
admin.initializeApp();
exports.sendNotification = functions.firestore
  .document("Users/{user_id}/Notifications/{notification_id}")
  .onWrite((change, context) => {
    const user_id = context.params.user_id;
    const notification_id = context.params.notification_id;

    console.log("USER ID : " + user_id + " NOTIFICATION ID " + notification_id);

    console.log("change.after.exists:" + change.after.exists);
    console.log("change.after.data():" + change.after.data());

    const data = change.after.data();

    const from_user_id = data.from;
    const type = data.type;

    console.log("FROM_USER ID : " + from_user_id + " TYPE " + type);

    const from_data = admin
      .firestore()
      .collection("Users")
      .doc(from_user_id)
      .get();
    const to_data = admin
      .firestore()
      .collection("Users")
      .doc(user_id)
      .get();

    return Promise.all([from_data, to_data]).then(result => {
      const from_name = result[0].data().name;
      const to_name = result[1].data().name;
      const token_id = result[1].data().token_id;

      const payload = {
        notification: {
          tag: from_user_id + "Follow",
          title: "Request From : " + from_name,
          icon: "follow_icon_for_notification",
          color: "white",
          sound: "TYPE_NOTIFICATION",
          body: "Click here to accept Follow Request.",
          click_action: "jony.Activities.ONFOLLOWREQUESTRECEIVED"
        },
        data: {
          message: "Click here to accept Follow Request.",
          user_id: from_user_id
        }
      };

      return admin
        .messaging()
        .sendToDevice(token_id, payload)
        .then(result => {
          var db = admin.firestore();

          const FieldValue = require("firebase-admin").firestore.FieldValue;

          var notificationRef = db
            .collection("Users")
            .doc(user_id)
            .collection("Notifications")
            .doc(notification_id)
            .delete();

          return console.log("Follow notification sent");
        });
    });
  });
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...