为什么db.收集不适用于firebase.我使用next.js w/ usessession()从next-auth.&



堆栈上的所有答案都有点旧,并且由于firebase不断更新他们的文档,我在/firebase上遇到了很多麻烦。有人能给我解释一下吗?

我正在使用next.js,我有下一个授权与Facebook链接。我想获取当前用户会话信息并将其提供给firebase

这里是我的firebase.js文件:

import firebase from 'firebase/compat/app';
import 'firebase/compat/storage';
import { initializeApp } from 'firebase/app';
import { getFirestore } from 'firebase/firestore/lite';
import { getStorage } from 'firebase/storage';
const firebaseConfig = {
apiKey: 'SECRET',
authDomain: 'SECRET',
projectId: 'SECRET',
storageBucket: 'SECRET',
messagingSenderId: 'SECRET',
appId: 'SECRET',
};
const app = !firebase.apps.length
? firebase.initializeApp(firebaseConfig)
: firebase.app();
// const app = initializeApp(firebaseConfig);
const db = getFirestore(app);
const storage = getStorage(app);
export { db, storage };

然后下面是发出错误的代码。我已经尝试了一些解决方案,尝试使用doc, getDoc,但它不匹配我的session。user.name"等,

这是我的.js文件,试图使用firebase。问题状态来自db.collection()。我正在使用usessession()与next.js来获取我的服务器端数据

import React, { useRef, useEffect } from 'react';
import Image from 'next/image';
import { useSession } from 'next-auth/react';
import { EmojiHappyIcon } from '@heroicons/react/outline';
import { CameraIcon, VideoCameraIcon } from '@heroicons/react/solid';
import { db } from '../firebase';
import firebase from 'firebase/app';
import { collection } from 'firebase/firestore';
function InputBox() {
const { data: session } = useSession();
const inputRef = useRef(null);
const sendPost = (e) => {
e.preventDefault();
if (!inputRef.current.value) return;
db.collection('posts').add({
message: inputRef.current.value,
name: session.user.name,
email: session.user.email,
image: session.user.image,
timestamp: firebase.firestore.FieldValue.serverTimestamp(),
});
inputRef.current.value = '';
};

[SOLVED]

由于新的文档v9>firebase已经修改了serverTimestamp()函数。

import { useSession } from 'next-auth/react';
import { EmojiHappyIcon } from '@heroicons/react/outline';
import { CameraIcon, VideoCameraIcon } from '@heroicons/react/solid';
import { db } from '../firebase';
import { collection, serverTimestamp, addDoc } from 'firebase/firestore';
function InputBox() {
const { data: session } = useSession();
const inputRef = useRef(null);
const sendPost = (e) => {
e.preventDefault();
if (!inputRef.current.value) return;
try {
const docRef = addDoc(collection(db, 'posts'), {
message: inputRef.current.value,
name: session.user.name,
email: session.user.email,
image: session.user.email,
timestamp: serverTimestamp(),
});
console.log(docRef.id);
} catch (e) {
console.log('ERROR ADDING DOC:', e);
}
inputRef.current.value = '';
};

我抛出了try/catch来处理这个问题。

timestamp: firebase.firestore.FieldValue.serverTimestamp() ->时间戳:serverTimestamp ()

还需要从'firebase/firestore'导入{serverTimestamp}

最新更新