Экспресс удерживать запрос до завершения последнего запроса - PullRequest
0 голосов
/ 15 апреля 2019

Итак, я пишу приложение в node.js + express, которое хочу достичь следующей цели.

  1. Пользователь POST много запросов почти одновременно (как с командой curl...&, которая & заставляет его работать в фоновом режиме)
  2. Обрабатывайте каждый запрос одновременно, удерживайте другие запросы до его завершения. Порядок может быть определен по времени поступления запроса, если тот же, то выберите случайным образом. Таким образом, если я отправляю 5 запросов на добавление данных в базу данных почти в одно и то же время, первый запрос будет добавлен в базу данных первым, тогда как другие запросы будут удерживаться (пока ничего не отвечая) до тех пор, пока первый запрос не будет обработан и не получит ответ 200 код, а затем следуйте при обработке второго запроса.

Можно ли добиться этого с помощью экспресс-функции, поэтому, когда я отправляю пару запросов одновременно, не возникает проблем, если что-то не добавляется в MongoDB должным образом.

1 Ответ

1 голос
/ 15 апреля 2019

Вы можете настроить промежуточное ПО до / после маршрутов, чтобы ставить в очередь и удалять запросы, если они выполняются. Как уже упоминалось, это не лучшая практика, но это способ сделать это в рамках одного процесса (не будет работать для моделей без серверов)

const queue = [];
const inprogress = null;

app.use((req, res, next) => {
  if (inprogress) {
    queue.push({req, res, next})
  } else {
    inprogress = res;
  }
})

app.get('/your-route', (req, res, next) => {
  // run your code
  res.json({ some: 'payload' })
  next();
})

app.use((req, res, next) => {
  inprogress = null;
  if (queue.length > 0) {
    const queued = queue.shift();
    inprogress = queued.res;
    queued.next();
  }
  next();
})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...