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

Javascript firebase.database().ref.on(…)返回null,javascript,firebase,google-cloud-firestore,Javascript,Firebase,Google Cloud Firestore,我认输了。我只是想不通。我已经设置了一个firebase应用程序,只是尝试对数据执行一个简单的请求,但它返回null。我的数据库当前设置为public,因此不应存在任何权限问题。我可以使用npm包成功地进行身份验证,对firebaseui/StyleDfRebeAseAuth作出反应,并获取用户信息,因此它在某种程度上正常工作,但我就是无法从数据库中获取数据。我已经查阅了很多次文档,并尝试在这里搜索问题,但似乎找不到任何东西。我尽力做到彻底。这就是我的基本情况 //代码中的实际配置直接从fir

我认输了。我只是想不通。我已经设置了一个firebase应用程序,只是尝试对数据执行一个简单的请求,但它返回null。我的数据库当前设置为public,因此不应存在任何权限问题。我可以使用npm包成功地进行身份验证,对firebaseui/StyleDfRebeAseAuth作出反应,并获取用户信息,因此它在某种程度上正常工作,但我就是无法从数据库中获取数据。我已经查阅了很多次文档,并尝试在这里搜索问题,但似乎找不到任何东西。我尽力做到彻底。这就是我的基本情况

//代码中的实际配置直接从firebase常规设置页面复制,因此,如果配置不正确,则在其页面上也不正确。 常量配置={ 阿皮奇:某个人, authDomain:myAppId.firebaseapp.com, 数据库URL:https://myAppId.firebaseio.com, projectId:myAppId, storageBucket:myAppId.appspot.com, messagingSenderId:mySenderId }; const handleSnapshot=snapshotVal=>{ console.logsnapshotVal; //因此,使用react返回setState,但这和console.log返回null this.setState{data:snapshotVal}; } firebase.initializeAppconfig; database=firebase.database countriesRef=数据库.ref'countries'; countriesRef.on'value',functionsnapshot{ handleSnapshotsnapshot.val;
}; Firebase提供两种不同类型的数据库:数据库和

从屏幕截图中,我看到您正在使用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);
    });

Firebase提供两种不同类型的数据库:数据库和

从屏幕截图中,我看到您正在使用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);
    });

另外,进行了一些调试,我从countriesRef.on的函数回调中看到了快照的一个对象,但是val不是该对象的一部分,并且我在其中没有看到任何可以获取该数据的内容。您可以控制快照的值吗?{snapshot:DataSnapshot}snapshot:DataSnapshot index_u513;PriorityIndex{}key:。。。节点{ChildrenNode{children}SortedMap,priorityNode}null,indexMap}。。。ref:Reference{repo:repo,path:path,queryParams\uu:queryParams,orderByCalled\uu:false}proto:Object proto:Object您的屏幕截图看起来像是在使用Cloud Firestore,而不是实时数据库。为此,您需要firebase.firestore。看哦,等等。。。我明白你在说什么了。我想我现在走的路是对的。非常感谢你@Phil,我打赌我能从这里找到答案。一旦你的建议被修复,我会发布一个关于它的答案。另外,我做了一些调试,我从countriesRef.on的函数回调中看到了快照的一个对象,但是val不是该对象的一部分,我也没有在其中看到任何会抓取该数据的东西。你能控制快照的值吗?{snapshot:DataSnapshot}快照:DataSnapshot索引:优先级索引{}键:。。。节点{ChildrenNode{children}SortedMap,priorityNode}null,indexMap}。。。ref:Reference{repo:repo,path:path,queryParams\uu:queryParams,orderByCalled\uu:false}proto:Object proto:Object您的屏幕截图看起来像是在使用Cloud Firestore,而不是实时数据库。为此,您需要firebase.firestore。看哦,等等。。。我明白你在说什么了。我想我现在走的路是对的。非常感谢你@Phil,我打赌我能从这里找到答案。一旦你的建议被修正,我会发布一个答案。