通过孩子获取Firebase实时数据库的价值

时间:2020-06-21 17:10:15

标签: javascript firebase firebase-realtime-database

我正在开发一个带有聊天页面的应用程序。 我正在使用Firebase实时数据库和我的聊天结构,如下所示: enter image description here

我收到如下新消息:

fireBuddyChats = firebase.database().ref('/buddychats');
this.fireBuddyChats.child(this.currentUserId)
        .child(this.buddy.uid)
        .orderByKey()
        .limitToLast(topMsgCount)
        .on('value', (snapshot) => {          
          this.buddyMessages = [];
          let temp = snapshot.val();
          for(var tempKey in temp) {
            this.buddyMessages.push(temp[tempKey]);
          }                            
        this.events.publish('newmessage');
    }

我正在监听“ newmessage”事件,以在聊天页面中显示新消息。 问题是:当我与某人聊天时,如果另一个朋友发送任何消息,则会运行数据库触发器(如上所述),并且聊天页面会显示另一个朋友的消息。我认为不应触发该事件,因为“ this.buddy.uid”不同。我想念的是什么?有什么建议吗?

1 个答案:

答案 0 :(得分:1)

也许为了防止这种情况,您可以在上面添加一个条件语句,以检查用户(当前用户正在与之交谈的)是否确实具有“ this.buddy.uid”的uid。因此,也许对于您可能在其中包含的代码而言:

if (socket.uid == this.buddy.uid).then

这应该防止其他用户在检查用户是否经常访问时加入/添加到实时数据库对话中。

希望这会有所帮助。