在onwrite事件中查询firebase数据库

时间:2018-01-12 13:53:28

标签: javascript firebase-realtime-database google-cloud-functions

我正在尝试编写一个firebase函数,它将检查" user"并根据数据库写入事件的行为。但是,当我查询数据库时,它每次都返回null,我没有弄清楚我做错了什么。任何帮助表示赞赏。

提前致谢。

我的实时数据库结构如下:

x

我的firebase功能文件是:

ilk-projemiz-cd55baddclose
 users
   edRIPg8BcZU9YPbubp7HtQo7phl1
     sayilar: 1532
     status:  "on"
   hakan
     sayilar:  5000
     status:  "waiting"
   mehmet
     sayilar:  7000
     status:  "on"

2 个答案:

答案 0 :(得分:1)

你必须听取用户节点

functions.database.ref( “/用户/ {UID} /状态”), 这条路径不存在,这就是为什么你得到null。

exports.sayi = functions.database.ref("/users").onWrite(event => {
   const status = event.data.val(); //this data will be new
   //Use above value to refer things

   if (event.data.previous.exists()) {
     //Update operation
  }

});

答案 1 :(得分:1)

这一行:const events = event.data.adminRef.child('users');尝试访问users节点下的status节点。我认为您想要做的是访问根引用下的用户节点。

改为使用Admin SDK:

const events = admin.database().child('users');

更新user变量超出范围,因此我建议您将sorunsuz()函数移到on()函数内:

const functions = require('firebase-functions');
const admin = require('firebase-admin');
admin.initializeApp(functions.config().firebase);

exports.sayi = functions.database.ref("/users/{uid}/status").onWrite(event => {
    const status = event.data.val();
    var user = event.data.ref.parent.key;
    if (status =="on") {
        console.log(status);
        const events = admin.database().child('users');
        const query =events.orderByChild('status').equalTo('on').limitToFirst(2);
        query.on("value",
         function(data) {
            console.log("11111");
            var fruits = data.val();
            console.log(fruits); //it returns null here
            var keys = Object.keys(fruits);
            for (var i = 0; i < keys.length; i++) {
                var key = keys[i];
                if(key==user){
                    //console.log(fruits[key].sayilar);
                    console.log("aaa");
                }else{
                    console.log("bbbb");
                }
            }
        }, sorunlu);
    }
});

function sorunlu(error) {
    console.log("Something went wrong.");
    console.log(error);
}