Firebase функции - подсчет детей и обновление записи - PullRequest
0 голосов
/ 02 июля 2018

Я пытался использовать функции Firebase для написания простого метода, но я незнаком с JS.

Ниже приведена структура моей базы данных в реальном времени

-spots

--- is_hidden: false

--- любит

------ like_id_1: true

--- недолюбливает

------ dislike_id_1: true

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

Если количество антипатий больше, чем количество (лайков + 5), изменить значение is_hidden на true

Это моя попытка решить проблему

exports.checkHiddenStatus = functions.database.ref('/spots/{spotid}').onWrite(
    (change, context) => {
      const collectionRef = change.after.ref;
      const isHiddenRef = collectionRef.child('is_hidden');
      const likesRef = collectionRef.child('likes');
      const dislikesRef = collectionRef.child('dislikes');


      if(isHiddenRef.before.val()) return;

      let likeCount = likesRef.numChildren();
      let dislikeCount = dislikesRef.numChildren();

      let isHidden = false;

      if( dislikeCount >= (likeCount + 5))
          isHidden = true;

      if(!isHidden) return;

      // Return the promise from countRef.transaction() so our function
      // waits for this async event to complete before it exits.
      return isHiddenRef.transaction((current) => {
        return isHidden;
      }).then(() => {
        return console.log('Counter updated.');
      });
    });

К сожалению, потому что у меня нет опыта работы с JS, я продолжаю застрять с сообщениями об ошибках, которые не понимаю. Самое последнее существо

TypeError: Невозможно прочитать свойство 'val' из неопределенного at exports.checkHiddenStatus.functions.database.ref.onWrite (/user_code/index.js:28:28)

Может кто-нибудь помочь мне написать эту функцию? Спасибо!

1 Ответ

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

Похоже, вы пытаетесь обработать базу данных Ссылка объект как объект изменения. Изменение имеет свойства before и after, а ссылка - нет.

Если у вас есть эталонный объект базы данных и вы хотите, чтобы значение базы данных находилось в этом месте, вам нужно запросить его с помощью метода once () .

Подробнее о чтении и записи данных с использованием Admin SDK.

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