簡體   English   中英

Firebase function onCall 時異常 Http

[英]Firebase function exception when onCall Http

com.google.firebase.functions.FirebaseFunctionsException:響應無效

    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,
        })
      })
  })

無法找出問題,嘗試使用單個文本時效果很好,但我需要整個集合。

可調用的雲函數只能返回 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 }

如果你直接發送 items 數組作為響應,它會拋出異常。

有一些規則參考Medium Article要遵循。

作為例外,沒有有效的 JSON object。 您必須將您的項目數組轉換為 Object 並在響應中傳遞關鍵“數據”:

錯誤return res.status(200).send(items)

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM