Файл Json случайным образом поврежден из скрипта узла

#node.js #json #discord #fs #discord.js

#node.js #json #Discord #fs #discord.js

Вопрос:

Я создаю discord-бота, который ставит в очередь двух человек для игры, он выполняет это, указывая их идентификатор discord, статус очереди, оппонента в файле JSON. Выглядит следующим образом для каждого пользователя:

 {
    "discordId": "296062947329966080",
    "dateAdded": "2019-03-11T02:34:01.303Z",
    "queueStatus": "notQueuing",
    "opponent": null
},
  

Когда один пользователь встает в очередь с помощью команды, он устанавливает «queueStatus» в очередь, а когда другой пользователь находится в очереди, он устанавливает оппонента этому человеку и сообщает обоим пользователям, что они оппоненты. Проблема в том, что случайно файл JSON будет поврежден при изменении, и что-то подобное произойдет с нижней частью:

             "dateAdded": "2019-03-11T02:34:01.303Z",
            "queueStatus": "notQueuing",
            "opponent": null
        }
    ]
}537"
        }
    ]
}
  

Моя единственная идея заключается в том, что это потому, что два человека, выполняющих это одновременно, одновременно записывают в файл и повреждают его, и это fs.writeFileSync исправило бы это, но если я использую fs.writeFileSync всю остальную часть discord, бот приостанавливается и перестает работать, пока не закончит запись, что не очень практичное решение.

Ответ №1:

Данные, хранящиеся в файле JSON, должны быть перенесены в MongoDB или другую базу данных. Операции CRUD с одним статическим файлом из нескольких заданий / источников не являются масштабируемым решением. Перенос этого хранилища данных в базу данных устранит эти задержки.

Проверьте это видео на Youtube с помощью freecodecamp.org


Однако, если файл JSON требуется или все еще предпочтителен, я бы рекомендовал использовать EventEmitter для создания единой очереди блокировки для чтения и записи.

Комментарии:

1. Хотя я согласен с ответом, не является ли MongoDB здесь немного излишним?