如何将snapshot.val()转换为节点js中的对象?

时间:2018-03-10 10:30:52

标签: node.js firebase firebase-realtime-database google-cloud-functions

我正在尝试编写一个firebase-cloud-function。我正在尝试将数据here is the data structure解析为object(model / pojo)或Hashmap,因为我相信JS中的所有内容都是一个地图,所以我写了这个代码

exports.checkAllBookings = functions.https.onRequest((request,response)=>{

    admin.database().ref(`/bookings`).once('value').then((snapshot)=>{
        return snapshot.val()
    }).then((bookingDetails)=>{


        var map = new HashMap()
        map = bookingDetails

        console.log(map.size)

        map.forEach(function(value,key){

            console.log(value)
        })
        // console.log(bookingDetails.keys)
        // bookingDetails.forEach(function(childSnap){

        //     var item = childSnap.val()
        //     console.log("item ::::: "+ item)
        // })
        response.send(map)
    })
})

&安培;这是完全相似的complete pic。我从这里Hashmap npm install安装了Hashmap depandency。但毕竟这一点我不断得到error here。那么如何将该数据解析为node.js中的bean或pojo或hashmap,以便我可以进一步完成我的任务?谢谢你的帮助

1 个答案:

答案 0 :(得分:0)

很难确定你要做什么。但是,如果您只是尝试将数据返回到被调用者,这是最简单的方法:

exports.checkAllBookings = functions.https.onRequest((request,response)=>{
    admin.database().ref(`/bookings`).once('value').then((snapshot)=>{
        response.send(snapshot.val());
    })
})

如果您在将数据发送回用户之前尝试过滤数据,则可以使用Snapshot.forEach方法:

exports.checkAllBookings = functions.https.onRequest((request,response)=>{

    admin.database().ref(`/bookings`).once('value').then((snapshot)=>{
        result = [];
        snapshot.forEach(function(bookingSnapshot) {
            var booking = bookingSnapshot.val();
            if (booking.someProperty === true) {
                result.push(booking);
            }
        });
        response.send(map)
    })
})

此处的if (booking.someProperty === true)条件是您想要的任何条件。您可以执行类似的操作,为每个预订添加更多信息。