表达保留请求直到最后一个请求完成

时间:2019-04-15 15:08:37

标签: node.js express

所以我要在node.js + express中编写一个应用程序,以实现以下目标。

  1. 用户几乎同时发布了许多请求(例如使用命令curl...&使&在后​​台运行)
  2. 一次处理每个请求,在一个请求完成之前保留其他请求。订单可以通过请求到达时间确定,如果相同则随机选择。因此,如果我POST 5请求几乎同时在数据库中添加内容,则第一个请求将首先添加到数据库中,而其他请求将被保留(尚未响应),直到第一个请求得到处理并以然后使用200代码处理第二个请求。

是否可以通过express实现此目的,所以当我一次发送几个请求时,不会发生像未正确添加到MongoDB中这样的问题。

1 个答案:

答案 0 :(得分:1)

您可以在路由之前/之后设置中间件,以排队和排队请求(如果正在进行中)。正如人们提到的那样,这并不是真正的最佳实践,但这是在单个过程中完成的一种方法(不适用于无服务器模型)

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();
})