Javascript firebase.database()。ref.on(...)返回null

时间:2018-11-02 01:51:41

标签: javascript firebase google-cloud-firestore

我把毛巾扔了。我似乎无法弄清楚。我已经设置了一个Firebase应用程序,只是尝试对数据做一个简单的请求,但是它返回null。我的数据库当前设置为公开,因此不应有任何权限问题。我可以使用npm软件包react-firebaseui/StyledFirebaseAuth成功进行身份验证,并获取用户信息,以便在一定程度上可以正常工作,但是我只是无法从数据库中获取数据。我已经遍历了很多次文档,并尝试在此处搜索问题,但似乎找不到任何东西。我试图做到彻底。所以这基本上就是我所拥有的...

// The actual config in the code is copied directly from the firebase general settings page, so if it isn't right, it isn't right on their page.
const  config = {
  apiKey: "someKey",
  authDomain: "myAppId.firebaseapp.com",
  databaseURL: "https://myAppId.firebaseio.com",
  projectId: "myAppId",
  storageBucket: "myAppId.appspot.com",
  messagingSenderId: "mySenderId"
};
const handleSnapshot = (snapshotVal) => {
    console.log(snapshotVal);
    // Using react hence the setState, but this and the console.log return null
    this.setState({data: snapshotVal});
}

firebase.initializeApp(config);

database = firebase.database()
countriesRef = database.ref('countries');
countriesRef.on('value', function(snapshot) {
    handleSnapshot(snapshot.val());
});

我也尝试过... countriesRef = database.ref('/countries'); ...和... countriesRef = database.ref('/countries/'); ...而且要特别确定,我是从Firebase上复制/粘贴了该名称。

这是数据库的屏幕抓图...

Firebase Screengrab

1 个答案:

答案 0 :(得分:3)

Firebase提供2种不同类型的数据库:Realtime数据库和Firestore

从屏幕截图中,我看到您正在使用Firestore数据库,但是您正在连接到实时数据库。

首先,初始化Firebase(在您的示例中可以):

firebase.initializeApp(config);

然后,您需要连接到Firestore:

// Initialize Cloud Firestore through Firebase
const db = firebase.firestore();

// Disable deprecated features
db.settings({
  timestampsInSnapshots: true
});

现在,当您连接时,是您的第一个请求时间:

const countriesRef = db.collection("countries");

countriesRef.get()
    .then((snapshot) => {
        snapshot.docs.forEach(doc => {
            console.log(doc.data())
        })
    })
    .catch((error) => {
        console.log("Error getting countries:", error);
    });