Задача:
По http-триггеру Firebase Functions получить все записи в Firebase Database единожды, то есть через метод once.
Код:const functions = require('firebase-functions');
const admin = require("firebase-admin");
const serviceAccount = require("path/to/serviceAccount.json");
admin.initializeApp({
credential: admin.credential.cert(serviceAccount),
databaseURL: "https://<database>.firebaseio.com/"
});
var db = admin.database();
var ref = db.ref("/data");
exports.resend = functions.https.onRequest((request, response) => {
return ref.once("value").then((data) => {
console.log('done');
response.status(200).send("OK");
}).catch((error) => {
console.log('error', error);
response.status(500).send("Error");
});
});
Суть проблемы:
Ошибка, собственно следующая: Firebase Functions обрывает связь по таймауту, думаю, что из-за невозможности получить доступ к базе, потому что ни в один из методов - then, catch - входа не выполняется и данные не достаются из базы. В инструкциях показывают код, который не содержит return ref.., но это тоже не помогает. Тестировал локально и на Google-серверах - результат один, timeout. Пробовал в ServiceAccount выдавать вручную права на запись и чтение - тоже самое. Кроме того, пробовал инициализировать admin через functions.config().firebase, что тоже никакого результата не дало.
Вопрос:
Точно ли дело в правах на чтение? Потому что запись данных проходит успешно, правда в Promise становиться не хочет, результат такой же, как при чтении - timeout. Может что-то в коде выше не так? Может есть какая-то инструкция специально под такую задачу? Или есть какие-то ограничения по организации чтения данных из базы данных в Firebase Functions? Как нужно организовать чтение из базы единожды по http-триггеру в Firebase Functions?