我正在制作与 Firestore 交互的 Firebase 函数。为了避免重复和拼写错误,我想从一个辅助文件中导出所有 Firestore 集合引用,但这样做会导致
RangeError: Maximum call stack size exceeded
部署错误。
我的助手的简化版本如下所示:
firestore-collections.ts
import { getFirestore } from "firebase-admin/firestore";
const firestore = getFirestore();
const getColRef = (collectionName: string) => {
const colRef = firestore.collection(collectionName);
return colRef;
};
export const colRefs = {
cities: getColRef("cities"),
countries: getColRef("countries"),
projects: getColRef("projects"),
};
Firebase 函数中助手的使用:
测试函数.ts
import { logger } from "firebase-functions/v2";
import { onRequest } from "firebase-functions/v2/https";
import { colRefs } from "./firestore-collections";
export const testFunction = onRequest(async (req, res) => {
// Example use of colRefs, gets the 'cities' collection and logs a doc id
// Commenting this out removes the deployment error
const docRef = colRefs.cities.doc();
logger.info(docRef.id);
// Return success
res.status(200).send("Success");
});
导出所有 Firebase 函数的索引文件:
index.ts
import { initializeApp } from "firebase-admin/app";
initializeApp();
export * from "./test-function";
每当我在
colRefs
中导入并使用 testFunction
时,我都会在部署时收到此错误:
收到响应代码400; body 无法从函数源生成清单:RangeError:超出最大调用堆栈大小
注意:我正在使用第 2 代 Firebase 函数
想通了。
const firestore = getFirestore()
需要进入 getColRef
函数内部。
像这样:
import { getFirestore } from "firebase-admin/firestore";
const getColRef = (collectionName: string) => {
const firestore = getFirestore();
const colRef = firestore.collection(collectionName);
return colRef;
};
export const colRefs = {
cities: getColRef("cities"),
countries: getColRef("countries"),
projects: getColRef("projects"),
};