快速保留请求,直到最后一个请求完成



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

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

是否有可能使用 express 实现这一点,因此当我一次发送几个请求时,不会出现诸如某些内容未正确添加到 MongoDB 中之类的问题。

您可以在路由之前/之后设置中间件,以便在正在进行请求时对请求进行排队和取消排队。正如人们所提到的,这不是真正的最佳实践,但这是一种在单个进程中执行此操作的方法(不适用于无服务器模型(

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

最新更新