无法使用Node.js解析Firebase的快照

时间:2018-06-12 10:46:28

标签: javascript node.js firebase firebase-realtime-database

我有一个查询,它会返回快照;

ref.orderByChild("index").equalTo(currentIndex).once("value", function(snapshot) {})

当我使用;

打印快照时
console.log(snapshot.val());

打印如下;

{'-LBHEpgffPTQnxWIT4DI':
    {
        date: '16.05.2018',
        first: 'let me in',
        index: 1,
        second: 'let others in'
    }
},

我需要获取此日期,此快照的第一个值。

我试过了;

childSnapshot.val()["first"] 
childSnapshot.val()["date"] 

childSnapshot.child.('first') 
childSnapshot.child.('date') 

但没有成功。

请告诉我我正在做的错误......

我的完整代码如下;

var indexRef = db.ref("/LastIndex/");
var ref = db.ref("/Source/")

indexRef.on("value", function(indexSnapshot) {
    console.log(indexSnapshot.val());

    var currentIndex = indexSnapshot.val()

    ref.orderByChild("index").equalTo(currentIndex).once("value", function(snapshot) {
        console.log(snapshot.val());

        if(snapshot !== null) {
            snapshot.forEach(function (childSnapshot) {

            if(childSnapshot !== null) {
                var newRef = db.ref("/ListTest/");
                var key = newRef.push({
                    "firstLanguageWord": childSnapshot.val()["first"] ,
                    "secondLanguageWord": childSnapshot.val()["second"] ,
                    "wordType": childSnapshot.val()["type"],
                    "date": childSnapshot.val()["date"],
                    "translateType": childSnapshot.val()["transType"]
                });

                currentIndex++;
                indexRef.set(currentIndex);
            }
        });
    }
});

BR,

Erdem的

1 个答案:

答案 0 :(得分:1)

更新,根据您的评论和原始问题的更新:

如果你的代码看起来是无限的,那就是#34;这是因为你在第一个查询中使用了on()方法。事实上,on()方法"会在特定位置监听数据更改。",如here所述。

如果您只想查询引用,请改用once()方法。该文档为here

以下是Query,因为您使用Reference(以及orderByChild()方法)调用equalTo()方法。

ref.orderByChild("index").equalTo(currentIndex)

正如文档中所解释的here

  

即使查询只有一个匹配项,快照也是如此   还是一个清单;它只包含一个项目。要访问该项目,您   需要循环结果:

ref.once('value', function(snapshot) {  
  snapshot.forEach(function(childSnapshot) {
    var childKey = childSnapshot.key;
    var childData = childSnapshot.val();
    // ...   
   }); 
});

所以你应该这样做:

ref.orderByChild("index").equalTo(currentIndex).once("value", function(snapshot) {
     snapshot.forEach(function(childSnapshot) {
        console.log(childSnapshot.val().first);
        console.log(childSnapshot.val().date);      
       }); 
});