Как читать запись базы данных Firebase в index.js Firebase Cloud Functions?

Я пытаюсь создать push-уведомления от устройства к устройству для приложения iOS с помощью функций Firebase Cloud. Я хочу инициировать событие всякий раз, когда новый дочерний элемент создается в базе данных по ссылке '/ user-notifications / {notificationRecipientUid} / {challengeId}'. Вот мой код index.js:

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

exports.sendWinLoseOrTieNotification = functions.database.ref('/user-notifications/{notificationRecipientUid}/{challengeId}').onWrite(event => {
...
const challengeId = event.params.challengeId;

functions.database.ref('/challenges/' + challengeId).once('value').then(function(snapshot) {
    const challengerUid = snapshot.val().challengerUid;
    ...
});
});

Когда новый дочерний элемент добавляется в базу данных в этом месте, я получаю эту ошибку «TypeError: functions.database.ref (...). Once is not a function» в журналах функций консоли Firebase. Таким образом, для ref, как в веб-api, нет метода 'Once':

firebase.database().ref('...').once('value').then(function(snapshot) { ... });

Мой вопрос: как прочитать существующее значение базы данных внутри index.js?




Ответы (1)


Что ж, решение состоит в том, чтобы использовать admin вместо firebase вот так:

admin.database().ref('...').once('value').then(function(snapshot) {
    ...
});
person naeemjawaid    schedule 01.05.2017
comment
Причина в том, что вы импортируете административный SDK в константу с именем admin: const admin = require('firebase-admin') - person Frank van Puffelen; 01.05.2017
comment
Я получаю ошибку 500 при использовании этого кода, и я не понимаю, как отлаживать .. Ошибка вызова Webhook. Ошибка: 500 Внутренняя ошибка сервера - person Waza_Be; 05.10.2017
comment
@Waza_Be Я не веб-разработчик, но я думаю, что веб-перехватчик предназначен для загрузки внешних пакетов, таких как firebase-functions, node mailer и т. Д. Вы должны установить его на свой компьютер, чтобы требовать такие пакеты, как в: const functions = require (' firebase-functions '); В этом случае вы выполняете развертывание не на своем компьютере, а на сервере Google, на котором установлены все веб-перехватчики, поэтому вы не получите там этой ошибки. - person naeemjawaid; 06.10.2017
comment
@Waza_Be Сделайте это, если вы еще этого не сделали: npm install firebase-functions @ latest --save npm install -g firebase-tools Перейти в каталог проекта и запустить: firebase login firebase init functions Поместите код в functions / index.js, затем запустите: firebase deploy --only functions, думаю, подойдет. Подробнее см. firebase.google.com/docs/functions/get-started. руководство. - person naeemjawaid; 06.10.2017