728x90
반응형
// 사용자 (카테고리별)
export const getCategoryPosts =
(category: Category) =>
async ({
pageParam
}: QueryFunctionContext<QueryKey, undefined | QueryDocumentSnapshot<DocumentData, DocumentData>>) => {
let q: Query<DocumentData> = query(collection(db, 'posts'), where('role', '==', 'user'));
if (category !== 'total') {
q = query(q, where('category', '==', category));
}
if (pageParam) {
q = query(q, orderBy('createdAt', 'desc'), startAfter(pageParam), limit(4));
} else {
q = query(q, orderBy('createdAt', 'desc'), limit(4));
}
try {
const querySnapshot = await getDocs(q);
return querySnapshot.docs;
} catch (error) {
console.error('Error getting documents:', error);
throw error;
}
};
증상:
[더보기] 버튼을 통해
파이어베이스 쿼리를 사용해서 데이터를 가져오는데,
where, startAfter, limit를 사용하는데 오류가 안 나는데
"orderBy"만 넣으면 데이터를 못 가져옴.
=> try~catch로 error 콘솔로 확인 결과 아래와 같은 오류가 나왔음
오류: pageListApi.ts:68 Error getting documents: FirebaseError: The query requires an index. You can create it here: https://console.firebase.google.com/v1/r/project/test-5e018/firestore/indexes?~~~~~~~~
해결:
해당 링크를 클릭하면 자동으로 색인을 생성해줌
Firebase Firestore에서 "The query requires an index" 오류가 발생하면
해당 쿼리에 필요한 인덱스가 Firestore에 생성되지 않은 경우입니다.
Firestore는 복잡한 쿼리 또는 필터링 조건이 있는 쿼리를 수행할 때 인덱스를 요구합니다.
이렇게 복합 색인을 등록해줘야함 !
복합 색인을 삭제하니 기존과 같은 오류가 발생하였고, 다시 추가하니 정상 작동 되었다.
▼ 색인 관련 내용 ▼
끝.
반응형
'TIL :: Today I Learned' 카테고리의 다른 글
리액트 + 타입스크립트 : 카카오톡 공유 기능 추가 + 링크복사 구현 (0) | 2024.01.24 |
---|---|
query-string : URL 쿼리 파라미터로 카테고리와 정렬 처리 (0) | 2024.01.23 |
타입스크립트 + useInfiniteQuery : 좋아요 기능 구현 (Optimistic Update) (0) | 2024.01.20 |
타입스크립트 + useInfiniteQuery : 더보기 기능 마지막 데이터 확인 (0) | 2024.01.18 |
타입스크립트 + Context : 모달 팝업 구현 (0) | 2024.01.17 |