如何使用firebaseServer检索Firebase数据?

时间:2019-07-14 00:24:42

标签: javascript firebase firebase-realtime-database firebase-authentication next.js

我使用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 };
  }

usersnap有值,但snap.val()为空。

如何通过firebaseServer检索消息?

如果有帮助,请here's the whole file

1 个答案:

答案 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 };
  }