[英]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.