NextJS: доступ к данным Google Firestore - PullRequest
0 голосов
/ 15 мая 2019

Так что я не уверен, как именно это сделать. Вот что у меня есть:

По моему Index.js у меня

Index.getInitialProps = async function () {
  const firebase = require('firebase')

  const firebaseConfig = {
    apiKey: "examplezbxW_9nKoUjas",
    authDomain: "example-prod.firebaseapp.com",
    databaseURL: "https://example-prod.firebaseio.com",
    projectId: "example-prod",
    storageBucket: "example-prod.appspot.com",
    messagingSenderId: "1234567890",
    appId: "1:1234567890:web:1234567890"
  };

  if (!firebase.apps.length) {
    firebase.initializeApp(firebaseConfig)
  }

  const db = firebase.firestore()

  const data = db.collection('data').get()

  return {
    data
  }
}

Это дает мне ошибку FirebaseError: projectId must be a string in FirebaseApp.options

(Может быть, мне нужно запустить пакет узла firebase и войти в систему ...)

В этой строке указано, что произошла ошибка const db = firebase.firestore()

Любая помощь приветствуется. Может быть, это не то место, где я должен пытаться загрузить данные пожарного хранилища ... не уверен.

Я также рассмотрел вопрос о создании сервера узлов и делал это таким образом, но в идеале я бы хотел этого избежать.

1 Ответ

0 голосов
/ 16 мая 2019

Хорошо, я внес пару изменений, чтобы это исправить.

Я перенес инициализацию Firebase в другой файл, и этот файл выглядел следующим образом:

import firebase from 'firebase/app'
import 'firebase/firestore'

export function loadDB() {
  try {
    var config = {
      apiKey: "YOUR INFO HERE",
      authDomain: "YOUR INFO HERE.firebaseapp.com",
      databaseURL: "https://YOUR INFO HERE.firebaseio.com",
      projectId: "YOUR INFO HERE",
      storageBucket: "YOUR INFO HERE.appspot.com",
      messagingSenderId: "YOUR INFO HERE",
      appId: "YOUR INFO HERE"
    };
    firebase.initializeApp(config);
  } catch (err) {
    // we skip the "already exists" message which is
    // not an actual error when we're hot-reloading
    if (!/already exists/.test(err.message)) {
      console.error('Firebase initialization error', err.stack);
    }
  }

  return firebase;
}

Затем в моем компоненте NextJS, в методе getInitialProps, я имею:

import { loadDB } from '../lib/db'

Index.getInitialProps = async function () {
  const db = await loadDB()
  let data = []
  const querySnapshot = await db.firestore().collection('data').get()
  querySnapshot.forEach(doc => {
    data.push(doc.data())
  })

  return {
    data
  }
}
...