React Native и Firebase: извлечение документов из базы данных не работает - PullRequest
0 голосов
/ 10 апреля 2020

Я пытаюсь сделать то, что должно быть самой простой вещью в мире: извлечь документы из моей базы данных Firebase, но это оказывается невозможным. Я использую React Native и Expo.

Я пытаюсь сделать что-то вроде этого:

import * as firebase from 'firebase';

// ... React component

useEffect(() => {
  firebase.database().collection("users")
  .where("geohash", ">=", lower)
  .where("geohash", "<=", upper)
  .get()
  .then((docs) => console.log(docs));
}, []);

В настоящее время я получаю следующую ошибку:

firebase.database().collection is not a function.

Что я пробовал до сих пор

Этот вопрос говорит об изменении firebase.database() на firebase.firestore(), однако, это не только не сработало для меня, но я также использую firebase.database().ref("/users/" + uid).set() и firebase.database()ref("/users/" + uid).update() в других частях моего приложения без проблем, поэтому я не думаю, что я должен изменить его на firebase.firestore(). И когда я его изменил, он все равно выдает ошибку:

Could not reach Cloud Firestore backend. Connection failed 1 times. Most recent error: FirebaseError: [code=not-found]: The project test-app8768 does not exist or it does not contain an active Cloud Datastore or Cloud Firestore database. Please visit http://console.cloud.google.com to create a project or https://console.cloud.google.com/datastore/setup?project=test-app8768 to add a Cloud Datastore or Cloud Firestore database. Note that Cloud Datastore or Cloud Firestore always have an associated App Engine app and this app must not be disabled. This typically indicates that your device does not have a healthy Internet connection at the moment. The client will operate in offline mode until it is able to successfully connect to the backend.

Мой Inte rnet соединение в порядке.

Мой вопрос

В любом случае, мои вопросы просты: в приложении React Native, использующем Expo, как я могу получить документы из базы данных с использованием firebase?

Похоже, я неправильно использую синтаксис или Мне не хватает библиотеки (хотя я использую ту же библиотеку, которая позволяет мне update и set, поэтому я бы предположил, что get документы должны быть в той же библиотеке). Любая помощь с благодарностью.

1 Ответ

0 голосов
/ 10 апреля 2020

Firebase содержит две базы данных:

  • База данных реального времени, в которой хранятся данные в виде единого дерева JSON, и
  • Cloud Firestore, в котором хранятся данные в документах и ​​коллекциях.

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

Если вы используете базу данных реального времени, вы получаете доступ к ней с JavaScript по firebase.database(), а местоположение в этой базе данных - с помощью ref("...").child("...").

Если вы используете Cloud Firestore, вы получаете к нему доступ из JavaScript, используя firebase.firestore(), и документ с collection("...").doc("...").

Ваш код смешивает эти API, которые выиграли ' т работа. Чтобы получить доступ к документу, вам нужно что-то вроде этого:

firebase.firestore().collection("users")
  .where("geohash", ">=", lower)
  .where("geohash", "<=", upper)
  .get()
  .then((docs) => console.log(docs));

Который избавится от сообщения firebase.database().collection is not a function..

Я рекомендую потратить время Прочитайте документацию по началу работы с Firestore, так как это предотвратит появление множества подобных проблем в будущем.

...