这是我的json文件:
{
"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"
}
}
}
}
此处,ERyWg81WxrXUb0sjsu9hv9T7K0E3
和Y9UNlizDSobddO8cdq7K4ChipYa2
是用户ID,他们有两个孩子,intents
和messages
,他们的孩子如上面的JSON结构所示。
现在,当用户发送消息时,该消息将添加到用户的messages
子节点。此外,必须注意的是,还可以在数据库中添加或删除其他用户
因此,当添加消息时,如何知道已发送消息的用户的id。例如:当ERyWg81WxrXUb0sjsu9hv9T7K0E3
用户消息和消息添加到ERyWg81WxrXUb0sjsu9hv9T7K0E3
messages
子目录时,我应该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 :(得分:0)
使用admin(a.k.a。服务器)SDK和客户端SDK之间没有根本区别。事件监听器的行为完全相同。
您不会从子事件侦听器获取您要查找的信息,也不会从父级获取,也不会从哪个后代触发更改。
您需要更改数据库架构和/或订阅策略,以实现目标。至少,你应该:
child_added
事件将意味着发送邮件。