gpt4 book ai didi

node.js - 如何使用 Node.js 中的 fs.createWriteStream() 附加到字符串化的 JSON 数组

转载 作者:太空宇宙 更新时间:2023-11-03 22:55:27 25 4
gpt4 key购买 nike

我需要编写聊天日志,并且出于多种原因希望将数据保存为 JSON。

在任何给定时间,我可能会打开许多​​房间,并且当前在第一个用户进入房间时打开一个 writeStream,然后在最后一个用户退出时结束流。

writeStream 对象与有关房间和当前在线用户的其他详细信息一起临时存储在数组中。由于每个房间对象在任何给定时间都可用,据我所知,当各个房间中的用户聊天时,连续写入许多聊天日志文件应该非常快速且高效。

我对 Node.js 还很陌生,所以请随时纠正我并提供一个比上面更有效的方法。

但是我的实际问题。

每次写入都是一个单独的 JavaScript 对象,其中包含特定的用户数据、聊天正文,当然还有发生的时间。

我当前正在创建 txt 文件,并使用 JSON.stringify() 将每个聊天对象的字符串化版本附加到文件中。

这当然会产生无效的 JSON,从而产生以下文本表示:

{"userid":"1","body":"hello world"}{"userid":"2","body":"hello world 2"}{"userid":"3","body":"hello world 3"}

实际上它需要读取:

[{"userid":"1","body":"hello world"},{"userid":"2","body":"hello world 2"},{"userid":"3","body":"hello world 3"}]

现在,一个明显的解决方案是在 Node.js 中实际打开文件,解析 JSON,将对象插入数组,然后将所有数据写回。但对我来说,这对于 IO 和处理来说都非常昂贵。

另一种替代方法是在每个对象的开头添加一个特殊字符,例如 |。然后,在读取日志文件时,客户端只需在该字符处拆分文件内容,并 JSON.parse 生成的数组中的每个对象。但肯定有更好的方法吗?

因此,我正在寻找一种更有效的方法,可以同时处理多个聊天室的日志记录。如果可能的话,利用writeStreams

理想情况下,我真的很想以以下方式简单地写入数据:

',' + 聊天对象 + ']'

然后,对于下一个写入操作,只需删除“]”字符并写入下一个字符即可修剪文件末尾。在 txt 文件中留下一个持续有效的 JSON 字符串。

或者,是否有更好的方法,通过实际写入 .json 文件本身并完全避免解析。

提前致谢,我为我对 Node.js 的天真表示歉意。

最佳答案

编辑:我意识到这并不能完全回答问题,但因为你说你是 NodeJS 的新手,所以我想你可能不知道这种事情是一种选择。因此,我将此作为答案,作为完成您想要完成的任务的更好方法。

为什么不使用 MongoDB通过MongooseJS 。这些事情可能是以上的一百万倍:

  1. 简单
  2. 可扩展
  3. 更好

我绝对会推荐这样做。当您这样做时,您也可以使用整个 MEAN stack .

关于node.js - 如何使用 Node.js 中的 fs.createWriteStream() 附加到字符串化的 JSON 数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17556156/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com