Функция js firestore узла регистрирует ошибку - TypeError: Невозможно прочитать свойство 'uid' из undefined в exports.observeMessages.functions.database.ref.onCreate - PullRequest
0 голосов
/ 02 июня 2018

Я получаю эту ошибку в журналах моих функций Firestore.

TypeError: Невозможно прочитать свойство 'uid' из undefined в exports.observeMessages.functions.database.ref.onCreate.event (/user_code/index.js: 23: 27)

и вот мой код функций

  exports.observeMessages = functions.database.ref('/user-messages/{uid}/{fromId}/{messageId}')
.onCreate(event => {

var uid = event.params.uid;
var fromUid = event.params.fromId
var messageId = event.params.messageId

// let's log out some messages

console.log('User: ' + uid + 'was just messaged by: ' + fromId);



      //firestore - get users fcm token from firestore to send a push messaged


var Ref = db.collection('Users').doc(uid);
var getDoc = Ref.get()
.then(doc => {
  if (!doc.exists) {
  return console.log('No such document!');
  } else {
   console.log('Document data:', doc.data());


   var userUID = parseFloat(doc.data().uid);

      return console.log(userUID);
  }
})
.catch(err => {
  return console.log('Error getting document', err);
});

1 Ответ

0 голосов
/ 02 июня 2018

Возможно, вы используете версию 1.0. + Firebase SDK для облачных функций, но ваш код использует старый синтаксис (один из SDK <1.0).Вы можете проверить версию Cloud Functions в вашем файле <code>package.json.

См. Этот документ для изменений в синтаксисе: https://firebase.google.com/docs/functions/beta-v1-diff

Вы должны изменить свой код следующим образом (см.первые 3 строки с «Здесь изменить»):

exports.observeMessages = functions.database.ref('/user-messages/{uid}/{fromId}/{messageId}')
.onCreate((snap, context) => {

var uid = context.params.uid;  // <- Here modify
var fromUid = context.params.fromId  // <- Here modify
var messageId = context.params.messageId  // <- Here modify

// let's log out some messages

console.log('User: ' + uid + 'was just messaged by: ' + fromId);

      //firestore - get users fcm token from firestore to send a push messaged

var Ref = db.collection('Users').doc(uid);
return Ref.get(). // <- Here modify
.then(doc => {
  if (!doc.exists) {
     console.log('No such document!');  // <- Here modify 
      return false;  // <- Here modify 
  } else {
   console.log('Document data:', doc.data());


   var userUID = parseFloat(doc.data().uid);

      console.log(userUID);  // <- Here modify
      //return a promise like the one returned by the sendToDevice method 
      //See https://firebase.google.com/docs/reference/admin/node/admin.messaging.Messaging#sendToDevice

  }
})
.catch(err => {
  console.log('Error getting document', err);  // <- Here modify, no need to return anything here
});

Обратите внимание, что вы должны также изменить некоторые другие части вашего кода , а не только 3 строки вверху.На самом деле вам нужно вернуть обещание в вашей облачной функции.Смотрите другие модификации выше, опять же с комментарием «Здесь изменить».

Я любезно (но настоятельно :-)) предлагаю посмотреть эти видео от команды Firebase: https://www.youtube.com/watch?v=7IkUgCLr5oA&t=28s и https://www.youtube.com/watch?v=652XeeKNHSk, которые объясняют эти ключевые понятия.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...