Firebase Firestore db.collection 不是一个函数
2021-09-24
4285
我正在开发一个班次调度程序,我使用 Firebase 身份验证和 Firestore。我的想法是,当用户注册时,它会在集合“workers”中创建一个文档,并将文档 ID 设置为用户的电子邮件。当用户添加班次时,我想将班次信息添加到该用户文档内的子集合“shifts”中,所有班次都将存储在该子集合中。我已经阅读并看过许多指南,但我无法正确理解语法/逻辑,并且由于 Firebase 语法的变化,我将包括我使用的大多数设置。
firebase.js:
import { getAuth } from "firebase/auth";
import "firebase/firestore";
import { initializeApp } from "firebase/app";
import { getFirestore } from "firebase/firestore"
require('firebase/auth');
const firebaseConfig = {
...
};
const app = initializeApp(firebaseConfig);
export const db = getFirestore(app);
export const auth = getAuth(app);
export default app
SignUp.js:
import { db } from "../firebase";
import { collection, addDoc, setDoc, doc } from "firebase/firestore";
import { useAuth } from '../contexts/AuthContext';
const { signup } = useAuth();
const handleSubmit = async (event) => {
event.preventDefault();
setError("");
try{
const data = new FormData(event.currentTarget);
await signup ( data.get('email'), data.get('password'));
const docRef = await setDoc(doc(db, "workers", data.get('email')), {
firstName: data.get('firstName'),
lastName: data.get('lastName'),
email: data.get('email'),
numberOfShifts: 0
});
}
catch(e){
console.error("Error adding document: ", e);
setError("Failed to create an account");
};
注册工作正常,文档 ID 是电子邮件。当我尝试将班次添加到该文档时出现错误(此阶段未创建班次集合)
Datasheed.js: (用户输入班次的位置)
import { auth } from "../firebase"
import { db } from "../firebase";
const commitChanges = async ({ added, changed, deleted }) => {
if (added) {
try {
db.collection("workers")
.doc(auth.currentUser.email)
.collection("shifts")
.add(added);
} catch (e) {
console.error("Error adding document: ", e);
}
}
目前,我只是尝试添加,我得到的捕获异常是: 添加文档时出错:TypeError: firebase__WEBPACK_IMPORTED_MODULE_5 _.db.collection 不是函数。 据我所知,问题是我使用 firebase 模块化,它不再有 db.collection,并且它使用集合引用。我是否也需要子集合的集合引用?为了实现这一点,我需要做哪些更改?
1个回答
您在
signup.js
中使用了模块化 SDK 和模块化语法。您应该在其他地方使用相同的语法。尝试像这样重构:
const commitChanges = async ({ added, changed, deleted }) => {
if (added) {
try {
await addDoc(collection(db, "workers", auth.currentUser.email, "shifts"), added)
} catch (e) {
console.error("Error adding document: ", e);
}
}
}
您可以在 文档 中了解有关新语法的更多信息。
Dharmaraj
2021-09-24