我使用Next.js' starter创建了具有Firebase身份验证的应用程序,并设置了Firebase身份验证和数据库。我可以很好地运行该应用程序(登录并添加消息)。
然后我注意到它不是对Firebase数据进行SSR:
export default class Index extends Component {
static async getInitialProps({ req, query }) {
const user = req && req.session ? req.session.decodedToken : null;
// don't fetch anything from firebase if the user is not found
// const snap = user && await req.firebaseServer.database().ref('messages').once('value')
// const messages = snap && snap.val()
const messages = null;
return { user, messages };
}
我未注释代码以查看是否可以对所有内容进行SSR:
export default class Index extends Component {
static async getInitialProps({ req, query }) {
const user = req && req.session ? req.session.decodedToken : null;
// don't fetch anything from firebase if the user is not found
const snap =
user &&
(await req.firebaseServer
.database()
.ref("messages")
.once("value"));
const messages = snap && snap.val();
// const messages = null;
return { user, messages };
}
user
和snap
有值,但snap.val()
为空。
如何通过firebaseServer检索消息?
如果有帮助,请here's the whole file。
答案 0 :(得分:0)
firebaseServer.database()===实时数据库
要添加到Cloud Firestore而不是实时数据库的文档。
这将从Cloud Firestore中提取文档:
static async getInitialProps({ req, query }) {
const user = req && req.session ? req.session.decodedToken : null;
const snap =
user &&
(await req.firebaseServer
.firestore()
.collection("messages")
.get());
const messages = snap && snap.docs.map(d => d.data());
return { user, messages };
}