2016-11-11 37 views
0

这是我的JSON文件:node.js-如何获取其子节点已更改且已添加的子节点的父节点?

{ 
    "ERyWg81WxrXUb0sjsu9hv9T7K0E3" : { 
      "intents" : { 
      "intentName" : "", 
      "intentValue" : "" 
      }, 
      "messages" : { 
      "-KViVgc7ZG051eMXP0-5" : { 
       "name" : "Ed", 
       "text" : "Hello, I'm Ed, your personal assistant cum friend", 
       "timestamp" : "1476880306" 
      } 
      }   
    }, 
    "Y9UNlizDSobddO8cdq7K4ChipYa2" : { 
     "intents" : { 
      "intentName" : "", 
      "intentValue" : "" 
      }, 
      "messages" : { 
      "-KViVgc7ZG051eMXP0-5" : { 
       "name" : "Ed", 
       "text" : "Hello, I'm Ed, your personal assistant cum friend", 
       "timestamp" : "1476880306" 
      } 
      } 
    } 
} 

这里,ERyWg81WxrXUb0sjsu9hv9T7K0E3Y9UNlizDSobddO8cdq7K4ChipYa2是用户ID和他们有两个孩子,即intentsmessages谁进一步让他们的孩子如图所示的JSON结构之上。
现在,当用户发送消息时,该消息将被添加到该用户的messages孩子。另外,必须注意的是,其他用户也可以从数据库中添加或删除。
因此,当添加消息时,如何知道已经发送消息的用户的ID。例如:当ERyWg81WxrXUb0sjsu9hv9T7K0E3用户消息和消息被添加到messages子目录ERyWg81WxrXUb0sjsu9hv9T7K0E3时,我应得到ERyWg81WxrXUb0sjsu9hv9T7K0E3。我必须在服务器端使用firebase node.js sdk来执行此操作。

仅供参考,我为获得新邮件的node.js服务器端代码:

var db = firebase.database(); 
var ref = db.ref("/"); 
console.log("Listening ...\n"); 
var text, name, timeStamp; 
var newPost = {}; 
ref.on("child_changed", function(snapshot){ 
    snapshot.child("messages").forEach(function(itemSnapshot) { 
     text = itemSnapshot.child("text").val(); 
     name = itemSnapshot.child("name").val(); 
     timeStamp = itemSnapshot.child("timeStamp").val(); 
    }); 
+0

ChildChanged事件旨在通知应用何时,呃...孩子已经改变。更改后的节点(父母和孩子)将发送到应用程序。你需要更多的东西吗? – Jay

+0

@Jay,我需要在服务器上获取数据(node.js Firebase SDk),而不是在应用程序上。我通过在嵌套函数中使用“child_changed”和“child_added”侦听器来获取新消息。我需要的是获取发送该邮件的用户的姓名(或者换句话说,其孩子已经更改并添加了孙子的编号 –

+0

您在哪里存储更改或发送人员的姓名。该消息是,“名字:埃德”键:在信息节点的消息中值 – Jay

回答

0

有使用admin(又名服务器)的SDK和客户端的SDK之间没有根本的区别。事件监听者的行为完全相同。

您不会从子事件侦听器获取您正在查找的信息,既不是父级,也不是子级触发更改的信息。

您需要更改数据库架构和/或您的订阅策略以实现您的目标。最起码,你应该:

  1. 有一个单一的每用户)节点的所有传出消息服务器可以简单地观察。一个child_added事件将意味着一条消息发送。
  2. 将发件人,收件人信息包含在邮件本身中。
    您可以使用安全规则来确保客户端不能伪造发件人的身份。有了一定的创造力,您还可以确保用户只有在获得许可时才能发送其他消息。
相关问题