Firebase功能/ Firestore无法正常工作并捕获返回的空对象

时间:2019-12-19 20:55:52

标签: firebase google-cloud-firestore google-cloud-functions

我只想从Firebase函数中访问我的Firestore数据库。我试图遵循所有文档和其他堆栈溢出问题,但仍然无法正常工作。这是我的代码:

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

exports.test = functions.https.onRequest((request, response) => {
  admin
    .firestore()
    .collection('users')
    .get()
    .then(querySnapshot => {
      const arrUsers = querySnapshot.map(element => element.data());
      return response.send(arrUsers);
    }).catch((error) => {
      // It is coming in here, and this below just returns '{}'
      response.send(error);
    });
});

我在做什么错了?

1 个答案:

答案 0 :(得分:4)

CollectionReference的{​​{3}}方法返回一个get(),其中“包含零个或多个代表查询结果的QuerySnapshot对象。文档可以作为通过docs属性数组或使用forEach()方法枚举”。

因此,您应该执行以下操作,在map()上调用querySnapshot.docs

exports.test = functions.https.onRequest((request, response) => {
  admin
    .firestore()
    .collection('users')
    .get()
    .then(querySnapshot => {
      const arrUsers = querySnapshot.docs.map(element => element.data());
      //return response.send(arrUsers);  //You don't need to use return for an HTTPS Cloud Function
      response.send(arrUsers);   //Just use response.send()
    }).catch(error => {
      //response.send(error);
      response.status(500).send(error)   //use status(500) here
    });
});

请注意对用于返回响应和处理错误的代码所做的更改。我建议您观看有关HTTPS Cloud Functions的Firebase官方视频:DocumentSnapshot,这是必须的!