![](/img/trans.png)
[英]NextJs getServerSideProps cannot fetch data from Cloud Firestore Web version 9
[英]Cannot fetch data from Firestore collection
我想從 Firebase 的 et_events 集合中獲取數據並將事件顯示在前端。
我在events.js文件中寫了如下代碼,嘗試獲取Firebase的事件信息,但是獲取不到。
export const actions = { fetchAllEvents: async ({ dispatch, commit }, eventIds) => { // TODO: fetch events from firestore console.log("start") const eventsSnap = await getDocs(query(eventsRef, where(documentId(), 'et_events', eventIds))) const events = await Promise.all( eventsSnap.docs.map(async snap => { const organization = await dispatch('fetchOrganization', snap.data().organizationId) return { id: snap.id, organization, isEvent: true, ...snap.data(), } }), ) events.sort((a, b) => { if(a.startDT > b.startDT) return 1; if(a.startDT < b.startDT) return -1; return 0; }); events.splice(1, 0, { isEvent: false, imgUrl: 'https://storage.googleapis.com/eventomy/statics/thumbnails/tutorial.png', title: 'Eventomyを始めよう', }) // remove code above and put your code instead commit(SET_EVENTS, events) }, }
另外,我不太明白這段代碼中“dispatch”、“commit”和“eventsSnap”的含義。 誰能告訴我?
完整代碼發布如下。
const SET_EVENTS = 'SET_EVENTS' export const state = () => ({ events: [], }) export const mutations = { SET_EVENTS: (state, events) => { state.events = events }, } export const getters = { allEvents(state) { return state.events }, } // import { doc, getDoc } from "firebase/firestore"; export const actions = { fetchAllEvents: async ({ dispatch, commit }, eventIds) => { // TODO: fetch events from firestore console.log("start") const eventsSnap = await getDocs(query(eventsRef, where(documentId(), 'et_events', eventIds))) const events = await Promise.all( eventsSnap.docs.map(async snap => { const organization = await dispatch('fetchOrganization', snap.data().organizationId) return { id: snap.id, organization, isEvent: true, ...snap.data(), } }), ) events.sort((a, b) => { if(a.startDT > b.startDT) return 1; if(a.startDT < b.startDT) return -1; return 0; }); events.splice(1, 0, { isEvent: false, imgUrl: 'https://storage.googleapis.com/eventomy/statics/thumbnails/tutorial.png', title: 'Eventomyを始めよう', }) // remove code above and put your code instead commit(SET_EVENTS, events) }, }
我不太確定您想在代碼上實現什么。 根據您上面的陳述,您只想獲取et_events
集合的文檔數據。 以下是從et_events
獲取數據的一些方法。
從et_events
獲取所有文檔:
import { collection, getDocs } from "firebase/firestore";
const querySnapshot = await getDocs(collection(db, "et_events"));
querySnapshot.forEach((doc) => {
// doc.data() is never undefined for query doc snapshots
console.log(doc.id, " => ", doc.data());
// Do something here...
});
要獲取過濾后的文檔,請使用where()
查詢:
import { collection, query, where, getDocs } from "firebase/firestore";
const q = query(collection(db, "et_events"), where("<FIELDNAME>", "==", "<FIELDVALUE>"));
const querySnapshot = await getDocs(q);
querySnapshot.forEach((doc) => {
// doc.data() is never undefined for query doc snapshots
console.log(doc.id, " => ", doc.data());
// Do something here....
});
如果您知道特定文檔的文檔 ID:
import { doc, getDoc } from "firebase/firestore";
const docRef = doc(db, "et_events", "<DOCUMENTID>");
const docSnap = await getDoc(docRef);
if (docSnap.exists()) {
console.log("Document data:", docSnap.data());
// Do something here...
} else {
// doc.data() will be undefined in this case
console.log("No such document!");
}
有關更多信息,您可以查看使用 Cloud Firestore 獲取數據。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.