Как обрабатывать несколько пользовательских запросов одновременно в node js - PullRequest
0 голосов
/ 11 января 2020

Я создал маршрут '/api/checkUsername'. Какое действие - проверить, существует ли какой-либо пользователь с same username. Если нет, сохраните новый UserName в коллекции пользователей и обновите счетчик пользователей в другой коллекции.

Для маршрута у меня есть функция

async function(username) {
   IsUserNameExists = await db.findOne({ 'username': username });

   if(IsUserNameExists) {
      res.send({ message: 'username already exists');  
  }else{
      await user.save() //to save user in DB
      await updateUserCount() //update user count in collection 2 
      res.send({ message: 'user saved successfully' });
  } 

}

. Это прекрасно работает во всех случаях использования. Но бывает, например, если 2 пользователя ['user1', 'user2'] проверяют одно и то же имя пользователя eg: Tony_Stark в одну секунду или с разницей в несколько миллисекунд.

eg пользователь1 и пользователь2 нажимают /api/checkUsername одновременно или с разницей в миллисекунды. Пользователь 1 обнаруживает, что имя пользователя Tony_Stark доступно и сохраняет свое имя пользователя, но в промежутке между сохранением имени пользователя user2 также ищет имя пользователя Tony_Stark, которое не было сохранено пользователем user1, поэтому это имя пользователя также доступно для user2. Который создает дубликат записи в моей коллекции. Как мне избежать этого?

...