Функции Firebase не запускаются для Cloud Firestore - PullRequest
0 голосов
/ 26 мая 2019

Я просто не вижу, куда я иду не так.Мой Cloud Firestore находится на «europe-west3», функции развернуты на «europe-west1» (документы говорят мне, что это самое близкое расположение к west3).

Структура такова: у меня естькуча «билетов», каждый из которых может иметь вложенную коллекцию под названием «комментарии».Таким образом, консоль выглядит следующим образом:

Console

Загрузка прошла успешно:

Functions console

Код функции был взят из официальных примеров кода Github-репо для примеров функций

Вот как выглядит мой код:

const functions = require('firebase-functions');

const admin = require('firebase-admin');
admin.initializeApp();

exports.countComments = functions.region('europe-west1').database.ref('/tickets/{ticketId}/comments/{commentsid}')
    .onWrite(
        async (change) => {
            const ticketsRef = change.after.ref.parent;
            const countRef = ticketsRef.parent.child('comments_count');

            let increment;
            if(change.after.exists() && !change.before.exists()) {
                increment = 1;
            } else if(!change.after.exists() && change.before.exists()) {
                increment = -1;
            } else {
                return null;
            }

            await countRef.transaction((current) => {
                return (current || 0) + increment;
            });
            console.log('Counter updated');
            return null;
        });

exports.recountComments = functions.region('europe-west1').database.ref('/tickets/{ticketId}/comments_count')
    .onDelete(
        async (snap) => {
            const counterRef = snap.ref;
            const collectionRef = counterRef.parent.child('comments');
            const commentsData = await collectionRef.once('value');
            return await counterRef.set(commentsData.numChildren());
        }
    )

Теперь,проблема в том, что эти функции просто не срабатывают.Я ничего не вижу в журналах, независимо от того, отправляю ли я изменения через своих клиентов (приложение Flutter) или я изменяю вещи прямо в консоли Firebase.

В своем отчаянии я 'Мы также пытались просто прослушать "/ tickets", так как любые изменения ниже этого пути также должны вызывать - но ничего нет.

Итак.Что является очевидным, что я упустил из виду?И да, я смотрел на другие вопросы / ответы, но ничего не прыгнуло на меня ...

edit:

Это будет исправленная версия, вероятно, не оптимальная.

exports.countComments = functions.region('europe-west1').firestore.document('/tickets/{ticketId}/comments/{commentsId}')
    .onWrite(
        async (change, context) => {
            const ticketId = context.params.ticketId;
            const ticketRef = admin.firestore().collection('tickets').doc(ticketId);

            let increment;
            if(change.after.exists && !change.before.exists) {
                increment = 1;
            } else if(!change.after.exists && change.before.exists) {
                increment = -1;
            } else {
                return null;
            }
            return transaction = admin.firestore().runTransaction(t => {
                return t.get(ticketRef)
                    .then(doc => {
                        let count = (doc.data().comments_count || 0) + increment;
                        t.update(ticketRef, {comments_count: count});
                    });
            }).then(res => {
                console.log('Counter updated');
            }).catch(err => {
                console.log('Transaction error:', err);
            });
        });

1 Ответ

1 голос
/ 26 мая 2019

Ваша база данных - Cloud Firestore, но вы написали триггер базы данных в реальном времени. Это две совершенно разные базы данных. Следуйте документации для написания триггеров Cloud Firestore .

Ваша функция запустится так:

functions.region('europe-west1').firestore.document('...')

Обратите внимание на "firestore" вместо "database".

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