Функции Firestore listCollections() возвращают только пустой массив

#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 === 0

5. ДОПОЛНИТЕЛЬНЫЕ ДАННЫЕ: Описанная выше ситуация происходит с эмулятором функций. Я только что попробовал тот же код в живой версии firebase functions, и он работает так, как ожидалось.

Ответ №1:

Если эта проблема возникает только при использовании эмуляторов, моим первым предложением было бы проверить базу данных Firestore вашего эмулятора. Она пуста? Создали ли вы необходимые фиктивные данные?

Я говорю это потому, что скриншот вашей базы данных — это ЖИВАЯ база данных, и эмулятор ее не трогает, он запрашивает базу данных эмулятора, обычно расположенную в: http://localhost:4000/firestore

Комментарии:

1. Да, это именно проблема! Я использую действующую базу данных, но функциональный эмулятор с пустой базой данных. Какая глупая оплошность. Как бы мне ни хотелось удалить этот вопрос из-за смущения, я продолжу в том же духе, если кто-нибудь еще допустит ошибку симулятора. Спасибо вам.