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,
})
})
})
無法找出問題,嘗試使用單個文本時效果很好,但我需要整個集合。
uj5u.com熱心網友回復:
可呼叫的云函式只能回傳 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 }
uj5u.com熱心網友回復:
如果你直接發送 items 陣列作為回應,它會拋出例外。
參考媒體文章有一些規則要遵循。
作為例外,沒有有效的 JSON 物件。您必須將 items 陣列轉換為 Object 并傳遞回應,然后是鍵 "data" :
錯誤的 return res.status(200).send(items)
對 return res.status(200).send({ data: { items } })
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/387239.html
上一篇:如何在沒有快照鍵的情況下從firebase獲取價值[JS]
下一篇:提交html表單到nodejs
