Firebase查询DataSnapshot val()返回null

时间:2017-09-26 20:00:29

标签: javascript database firebase firebase-realtime-database

我的Firebase结构位于

之下
  {
  "Test1 Lab" : {
    "Equipment" : "3-D printer",
    "Hours" : "7AM-6PM",
    "Location" : "Library",
    "Name" : "Digital Lab"
  },
  "Test2 Lab" : {
    "Equipment" : "Oculus",
    "Hours" : "7AM-6PM",
    "Location" : "Hall",
    "Name" : "Test Lab"
  }
}

顶层称为" makerpace"。我正在尝试获取位置为"图书馆"的项目的名称,设备和小时数。我运行了代码:

var red = database.ref('makerspace');
    return red.orderByChild('Location').equalTo("Library").once('value').then(function(snapshot){
            console.log(snapshot.child("makerspace").child("Name").key);
    });

我得到"姓名"。但是,当我将.key更改为.val()时,我应该期待得到" Digital Lab",但我得到null。我不知道如何解决这个问题。

3 个答案:

答案 0 :(得分:0)

快照已经在makerspace节点上,因此它应该是:

var red = database.ref('makerspace');
return red.orderByChild('Location').equalTo("Library").once('value').then(function(snapshot){
        console.log(snapshot.child("Name").val());
});

答案 1 :(得分:0)

试试这个

var red = database.ref('makerspace');
return red.orderByChild('Location').equalTo("Library").once('value').then(function(snapshot){
    snapshot.forEach(function(data) {
       console.log(data.val());
    });
});

答案 2 :(得分:0)

我建议访问这样的快照数据,

red.orderByChild('Location').equalTo("Library").once('value').then(function(snapshot){
       console.log(snapshot.val());   <==========
       // result would be
{ "Test1 Lab" : { "Equipment" : "3-D printer","Hours" : "7AM-6PM","Location" : "Library","Name" : "Digital Lab" } }
        }

要获取可以执行的属性,

       snapshot.val()['Test1 Lab']['Name'] or snapshot.val()['Test1 Lab'].Name
       snapshot.val()['Test1 Lab']['Hours']

现在你可以使用Object.keys(snapshot.val())[0]

获得'Test1 Lab'

snapshot.val()与JSON Object类似,因此只需像访问对象一样访问其属性。无需使用child()方法来访问数据。