【问题标题】:Firestore functions listCollections() only returning empty arrayFirestore 函数 listCollections() 仅返回空数组
【发布时间】:2021-02-06 16:18:04
【问题描述】:

这是我的数据库...

我在 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 的文档。你怎么看……?

【问题讨论】:

  • 仅供参考,我刚刚尝试了您的代码,但确实得到了一个包含两个元素的数组。如果没有更多信息,很难知道您的问题是什么...
  • 如果您将代码直接放在脚本标签中(即不通过按钮单击)会发生什么?另外,如果你这样做console.log(JSON.stringify(res)); console.log(res.data.collections.length);会发生什么?
  • @RenaudTarnec 在您的第二条评论中,鉴于 Cloud Function 的日志输出,问题似乎出在其中,而不是在调用函数的方式或处理结果的方式上。 @DoubleTri:这意味着您还应该能够在本地 Node.js 脚本上重现此问题,这可能值得一试,因为它减少了可能导致问题的因素。
  • JSON.stringify(res) === {"data":{"collections":[]}}。 res.data.collections.length === 0
  • 附加数据:上述情况发生在功能模拟器上。我刚刚在 firebase 函数的实时版本中尝试了相同的代码,它按预期运行。

标签: node.js firebase google-cloud-firestore


【解决方案1】:

如果此问题仅在使用模拟器时出现,我的第一个建议是检查您的模拟器 Firestore 数据库。是空的吗?您是否创建了必要的虚拟数据?

我这样说是因为你的数据库截图是一个 LIVE 数据库,而 Emulator 不会触及它,它会查询 Emulator db,通常位于:http://localhost:4000/firestore

【讨论】:

  • 是的,这正是问题所在!我正在使用一个实时数据库,但使用一个空数据库的函数模拟器。多么愚蠢的疏忽。尽管我很想因为尴尬而删除这个问题,但我会继续这样做,以防其他人犯了模拟器错误。谢谢你。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-03-26
  • 1970-01-01
  • 1970-01-01
  • 2022-07-09
相关资源
最近更新 更多