Firebase Web将聊天作为数组存储在实时数据库中

时间:2019-08-13 07:24:58

标签: javascript firebase firebase-realtime-database

我正在尝试使用Firebase实时数据库制作一个聊天应用程序。我在Firebase中将2个用户之间的聊天存储为JSON数组。

最初,当用户用来发送消息时,我用来设置整个聊天数组。但是我很快意识到,随着数组的增长,这不是一个好主意。

await firebase.database().ref("chats/" + chatId).set(messages)

当我就如何在Firebase中处理数组检查了官方documentation时,我意识到我可以改而使用push()。我现在正在做这样的事情:

let messageRef = firebase.database().ref("chats/" + chatId)
await messageRef.push().set(message);

这会导致2个问题,一个是生成unique keys,另一个是当我获取聊天记录时,它返回JSON object而不是Array

  

我想要这样的东西:

enter image description here


  

相反,使用推后,我得到:

enter image description here


实现我想要的最好的方法是什么?

1 个答案:

答案 0 :(得分:0)

如您所见,调用push()将为您生成一个密钥。

两种解决方案:

•您让Firebase为您生成唯一密钥,并将JSON对象转换为客户端上的数组:

firebase.database().ref("chats/" + chatId).once("value").then(data => {
    console.log(Object.values(data.val()));
});

在这里https://developer.mozilla.org/fr/docs/Web/JavaScript/Reference/Objets_globaux/Object/values

了解更多

•您使用自己的键(“ 0”,“ 1”,“ 2” ...)

firebase.database().ref("chats/" + chatId).child(key).set(msg);

给您带来的不便是您需要知道钥匙。您可以使用messages.length或存储带有消息大小的新字段(使用 transaction 进行递增)。不要忘记编写规则以防止用户覆盖。

如果可以的话,请使用第一种解决方案。