我正在尝试使用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
。
我想要这样的东西:
相反,使用推后,我得到:
实现我想要的最好的方法是什么?
答案 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 进行递增)。不要忘记编写规则以防止用户覆盖。
如果可以的话,请使用第一种解决方案。