#node.js #firebase #google-cloud-firestore
#node.js #firebase #google-облако-firestore
Вопрос:
У меня есть следующий код в функциях firebase…
const functions = require('firebase-functions');
const admin = require('firebase-admin');
admin.initializeApp();
const db = admin.firestore();
exports.getCollections = functions.https.onCall(async (data, context) => {
const path = admin.firestore().collection('BusinessName').doc('employee');
const collections = await path.listCollections();
collections.forEach(collection => {
console.log('Found subcollection with id:', collection.id);
});
return({ collections: collections })
});
И внешний код…
let buttonClick = () => {
let getCollections = firebase.functions().httpsCallable('getCollections');
getCollections().then((res) => {
console.log(res);
})
}
В этом пути есть две вложенные коллекции. Эта функция должна возвращать массив с двумя тестовыми коллекциями, показанными на изображении выше. Однако он возвращает только пустой массив.
и в журнале функций…
Я устал от разных путей с разными структурами базы данных, но возврат всегда представляет собой пустой массив. Должно быть, что-то не так с node.js функция, но это прямо из документации firebase. Что вы думаете …?
Комментарии:
1. К вашему сведению, я только что попробовал ваш код, и я получаю массив с двумя элементами. Трудно понять, в чем ваша проблема, без дополнительной информации…
2. Что произойдет, если вы поместите код непосредственно в тег script (т.е. Не через нажатие кнопки)? Кроме того, что произойдет, если вы это сделаете
console.log(JSON.stringify(res)); console.log(res.data.collections.length);
?3. @RenaudTarnec В вашем втором комментарии, учитывая вывод журнала облачной функции, проблема, похоже, заключается в этом, а не в том, как вызывается функция или обрабатываются ее результаты. И @ DoubleTri: это означает, что вы также должны иметь возможность воспроизвести эту проблему на локальном Node.js сценарий, который, возможно, стоит попробовать, поскольку он уменьшает факторы, которые могут быть причиной проблемы.
4.
JSON.stringify(res)
=== {«данные»:{«коллекции»:[]}}.res.data.collections.length
=== 05. ДОПОЛНИТЕЛЬНЫЕ ДАННЫЕ: Описанная выше ситуация происходит с эмулятором функций. Я только что попробовал тот же код в живой версии firebase functions, и он работает так, как ожидалось.
Ответ №1:
Если эта проблема возникает только при использовании эмуляторов, моим первым предложением было бы проверить базу данных Firestore вашего эмулятора. Она пуста? Создали ли вы необходимые фиктивные данные?
Я говорю это потому, что скриншот вашей базы данных — это ЖИВАЯ база данных, и эмулятор ее не трогает, он запрашивает базу данных эмулятора, обычно расположенную в: http://localhost:4000/firestore
Комментарии:
1. Да, это именно проблема! Я использую действующую базу данных, но функциональный эмулятор с пустой базой данных. Какая глупая оплошность. Как бы мне ни хотелось удалить этот вопрос из-за смущения, я продолжу в том же духе, если кто-нибудь еще допустит ошибку симулятора. Спасибо вам.