Как получить доступ к объекту DocumentReference, хранящемуся в Firestore, из облачной функции? - PullRequest
0 голосов
/ 09 ноября 2018

В моей базе данных Firestore я храню DocumentReferences для пользователей, так что я всегда использую самые последние пользовательские данные, такие как имя пользователя, изображения профиля и токены авторизации.

Я также внедряю Cloud Functions для прослушивания триггеров базы данных, чтобы я мог отправлять уведомления конкретным пользователям об активности, связанной с их сообщениями.

Здесь я сталкиваюсь с проблемами, потому что я не знаю, как правильно использовать сохраненный ссылочный объект внутри функции Node.js, когда я получаю к нему доступ, как и ко всей другой информации базы данных.

Ниже приведен мой код функции:

exports.countNameChanges = functions.firestore
.document('posts/{postId}')
.onUpdate((change, context) => {
  // Retrieve the current and previous value
  const data = change.after.data();
  const previousData = change.before.data();
  var registrationToken = '';

  var notification = '';
  var postTitle = data.statement;
  var userRef = data.userRef; //This is my `DocumentReference` object

  if (data.interactionCount > previousData.interactionCount && data.postTypeId == 2131165321) notification = 'You recieved a new comment!';
  if (data.interactionCount > previousData.interactionCount && data.postTypeId == 2131165335) notification = 'You recieved a new vote!';
  if (data.likes > previousData.likes) notification = 'You have a new post like!' ;
  if (data.dislikes > previousData.dislikes) notification = 'You have a new post dislike!' ;

  admin.firestore()
        .doc(userRef) //This is my `DocumentReference` object
        .get()
        .then(doc => {
            registrationToken = doc.data().token;

            var payload = {
               data: {
                  title: postTitle,
                  body: notification
               },
               token: registrationToken
            };

            admin.messaging().send(payload)
            .then((response) => {
               console.log('Successfully sent message:', response);
               })
            .catch((error) => {
               console.log('Error sending message:', error);
               })
        });

   });

});

Журнал моей функции

enter image description here

Я бы предположил, что с объектом DocumentReference будет легко работать внутри Cloud Function, поскольку объект поддерживается для непосредственного хранения в Firestore, но я не могу понять это.

1 Ответ

0 голосов
/ 09 ноября 2018

Если userRef является объектом типа DocumentReference, просто вызовите get() для него напрямую. Не передавайте это doc(). Вы должны только передавать объекты строкового типа в doc().

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