Не удается запросить из Firebase мое приложение React Native?

Кажется, я могу получить все мои данные из моей базы данных Firebase Realtime со следующим:

let itemsRef = firebaseApp.database().ref('/');

itemsRef.on('value', (snapshot) => {
  let data = snapshot.val();
  let item = Object.values(data);
  this.setState({item});
});

Но когда я пытаюсь выполнить запрос с определенными параметрами вместо того, чтобы просто получить всю информацию, я всегда получаю эту ошибку:

@firebase/database: FIREBASE WARNING: Exception was thrown by user callback.

TypeError: Cannot convert undefined or null to object

Вот как я пытаюсь запросить информацию ... буквально следуя документации, и каким-то образом мой код работает, когда я извлекаю всю информацию, но не тогда, когда единственное изменение, которое я делаю, - это добавление запроса?

let itemsRef = firebaseApp.database().ref('/');
    
itemsRef.orderByChild('roundedBPM').equalTo('100').on('value', (snapshot) => {
  let data = snapshot.val();
  let item = Object.values(data);
  this.setState({item});
});

Есть ли у кого-нибудь еще проблемы с запросами из Firebase, или я что-то делаю не так?

Вот как мои данные структурированы в Firebase:

Не удается запросить из Firebase мое приложение React Native?

Таким образом, ошибка, как вы можете догадаться, связана с Object.values ​​(data), а data имеет значение null. Вопрос в том, есть ли у вас в базе данные с указанными параметрами запроса? где-то вы пытаетесь запросить то, чего не существует. Прежде чем продолжить, сначала попробуйте console.info свои данные и посмотрите, что вы видите. Вы также можете легко использовать для этого консоль chrome dev tools

TheeBen 26.08.2018 23:39

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

TheeBen 26.08.2018 23:40

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

TheeBen 26.08.2018 23:41

Также размещено на github.com/firebase/firebase-js-sdk/issues/1167

Frank van Puffelen 27.08.2018 04:56

@TheeBen Я отредактировал свой вопрос и опубликовал изображение своей структуры данных Firebase. У меня определенно есть песни в моей базе данных со значением «roundedBPM», равным 100, так почему же данные нулевые? Огромное спасибо!

Maggie 27.08.2018 14:00

Похоже, вы используете строку для сравнения в своем запросе, но значение в вашей базе данных является числом. Вы не пробовали удалить кавычки из equalTo('100')?

André Kool 27.08.2018 15:15

кажется, что проблема заключается в строковом / числовом характере вашего запроса и данных. попробуйте equalTo (100), а не ('100')

TheeBen 28.08.2018 01:24

Большое спасибо!! Это сработало! Наконец-то, боже, я несколько дней пытался заставить это работать!

Maggie 28.08.2018 14:17
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
1
8
1 188
1

Ответы 1

Я бы попробовал инициализировать firebase в dbConfig.js, например, так:

import * as firebase from 'firebase';

let config = {
    apiKey: "XXXXXXX",
    authDomain: "XXXXX",
    databaseURL: "XXXXX",
    projectId: "XXXXX",
    storageBucket: "XXXX",
    messagingSenderId: "XXXX"
};
firebase.initializeApp(config);

export default firebase;

Я бы импортировал firebase, где это:

import firebase from './dbConfig.js' 
let itemsRef = firebase.database().ref('/');
itemsRef.orderByChild('roundedBPM').equalTo('100').on('value', (snapshot) => {
  let data = snapshot.val();
  let item = Object.values(data);
  this.setState({item});
});

Примечание: OrderByChild элемент roundedBPM должен быть прямым потомком корневого пути '/', если это вложенный дочерний элемент, вы можете сделать что-то вроде этого:

let itemsRef = firebase.database().ref('/users');
itemsRef.orderByChild('roundedBPM').equalTo('100').on('value', (snapshot) => {
      ...
});

Примечание: если вы устанавливаете equalTo () roundedBPM, когда это число, а не строка, вы не получите никаких данных. Убедитесь, что вы используете правильный тип данных.

Я надеюсь, это поможет!

Другие вопросы по теме