【问题标题】:Firebase function exception when onCall HttponCall Http 时的 Firebase 函数异常
【发布时间】:2022-01-20 22:16:55
【问题描述】:

com.google.firebase.functions.FirebaseFunctionsException:响应不是有效的 JSON 对象。

    exports.loadVideos = functions
  .region('asia-south1')
  .https.onRequest(async (req, res) => {
    let uid = []

    const subscribers = await db
      .collection(SUBSCRIPTIONS_COLLECTION)
      .doc('05piDSvu5mNxHOn2yKpnL2V322r1')
      .get()
    subscribers.data().subsBy.forEach((s) => {
      uid.push(s.userId)
    })

    return db
      .collection('videos')
      .where('userId', 'not-in', uid)
      .get()
      .then((snapshot) => {
        if (snapshot.empty) {
          return res.status(404).send({
            error: 'Unable to find the document',
          })
        }
        let items = []
        snapshot.docs.forEach((doc) => {
          items.push(doc.data())
        })
        return res.status(200).send(items)
      })
      .catch((err) => {
        console.error(err)
        return res.status(404).send({
          error: 'Unable to retrieve the document',
          err,
        })
      })
  })

无法找出问题,尝试使用单个文本时效果很好,但我需要整个集合。

【问题讨论】:

    标签: android firebase google-cloud-functions


    【解决方案1】:

    Callable Cloud Functions 只能返回 JSON 类型。您不能返回整个 QuerySnapshot,这是您的代码正在尝试执行的操作。

    如果你想返回文档的数据,那就是:

    return { videos: filteredVideo.map((doc) => doc.data()) }
    

    如果您还想返回每个文档的文档 ID,那就是:

    const result = filteredVideo.map((doc) => {
      return { id: doc.id, data: doc.data() }
    })
    return { videos: result }
    

    【讨论】:

    • 试过了,现在得到 NOT_FOUND EXCEPTION
    • 代码已更新,请再次查看
    • 我已经在模拟器上测试过这段代码,它工作正常
    【解决方案2】:

    如果你直接发送 items 数组作为响应,它会抛出异常。

    有一些规则 ref Medium Article 要遵循。

    作为例外,没有有效的 JSON 对象。您必须将您的 items 数组转换为 Object 并在响应中传递关键“数据”:

    错误 return res.status(200).send(items)

    return res.status(200).send({ data: { items } })

    【讨论】:

      猜你喜欢
      • 2021-04-10
      • 2019-01-26
      • 2019-02-01
      • 2018-11-02
      • 2022-09-26
      • 2019-02-22
      • 1970-01-01
      • 2018-12-16
      • 1970-01-01
      相关资源
      最近更新 更多