node.js - Json 文件从节点脚本中随机损坏
问题描述
我正在制作一个不和谐机器人,它将两个人排在一起进行游戏,它通过在 JSON 文件中包含他们的不和谐 ID、队列状态、对手来执行此操作。每个用户看起来像这样:
{
"discordId": "296062947329966080",
"dateAdded": "2019-03-11T02:34:01.303Z",
"queueStatus": "notQueuing",
"opponent": null
},
当一个人使用命令排队时,它将“queueStatus”设置为 Queuing,当发现另一个人使用 Queuing 时,它会将对手设置为该人,并告诉两个用户他们是对手。问题是 JSON 文件在更改时会随机损坏,并且底部会发生类似的事情:
"dateAdded": "2019-03-11T02:34:01.303Z",
"queueStatus": "notQueuing",
"opponent": null
}
]
}537"
}
]
}
我唯一的想法是,这是因为同时执行此操作的两个人同时写入文件并损坏它,这fs.writeFileSync
将修复它,但是如果我使用fs.writeFileSync
整个不和谐机器人的其余部分,它会暂停并停止工作,直到它完成写作这不是一个非常实用的解决方案。
解决方案
存储在 JSON 文件中的数据应迁移到MongoDB
其他数据库。对来自多个作业/源的单个静态文件的 CRUD 操作不是可扩展的解决方案。将此数据存储迁移到数据库将解决这些暂停和停止问题。
通过 freecodecamp.org在Youtube 上查看此视频
但是,如果需要 JSON 文件或仍然首选 JSON 文件,我建议使用EventEmitter
创建一个用于读取和写入的阻塞队列。
推荐阅读
- regex - Regexp_Extract 分隔字符串中的第 n 个位置
- sql - 2 个时间戳之间的 SQL Redshift 天数差异
- swift - 当我使用约束并最小化 App 时,SceneKit 崩溃
- django - 相对于原始 SQL,Django 查询速度较慢
- javascript - Vue-chartjs:即使数据没有改变也重新渲染图表
- sql - 带有大量空格的电子邮件正文和图表对话的 SQL 列 - 如何清理
- css - Bootstrap Affix 固定位置动态
- angular - Ngrx 在项目的多个操作中拆分项目的操作
- r - R 连接到 Hive protobuf 类错误
- javascript - 在地图上的点击处理程序中传递它