Node.js 快速保留请求直到最后一个请求完成

Node.js 快速保留请求直到最后一个请求完成,node.js,express,Node.js,Express,因此,我正在node.js+express中编写一个应用程序,我希望实现以下目标 用户几乎同时发布许多请求(如使用命令curl…&,该命令使其在后台运行) 一次处理每个请求,在一个请求完成之前保留其他请求。订单可根据请求到达时间确定,如果相同,则随机选择。因此,如果我在几乎相同的时间发布5个请求以在数据库中添加内容,则第一个请求将首先添加到数据库中,而其他请求将被保留(尚未响应任何内容),直到第一个请求被处理并使用200代码进行响应,然后继续处理第二个请求 使用express是否可以实现这一点,

因此,我正在node.js+express中编写一个应用程序,我希望实现以下目标

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

  • 使用express是否可以实现这一点,因此,当我一次发送两个请求时,不会出现某些问题,比如MongoDB中添加的内容不正确。

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


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


    Web请求(如POST)始终独立运行,即在处理同一用户的请求时,您无法停止来自同一用户的其他请求。如果您担心数据库更新,请不要停止,因为数据库更新本质上是连续的和原子的,即如果req按顺序调用数据库,则数据库将按顺序更新数据。如果您担心同一个用户发出许多请求,那么就不要让用户通过更改前端来快速拨打电话。@我的意思是,如果服务器检测到一个请求在它之前进入,它将通过不响应请求来保持请求,直到在它们之前输入请求finishes@Rash我现在遇到了上面提到的问题,不知道为什么,但问题是存在的。啊,明白了。我只是假设你想要每个用户。在这种情况下,您已经得到了答案:)像POST这样的Web请求总是彼此独立运行,即在处理一个请求时,您不能停止来自同一用户的其他请求。如果您担心数据库更新,请不要这样做,因为数据库更新本质上是连续的和原子的,即如果req按顺序调用数据库,然后数据库将按顺序更新数据。如果您担心同一个用户发出许多请求,那么就不要让用户通过更改前端来快速拨打电话。@我的意思是,如果服务器检测到一个请求在它之前进入,它将通过不响应请求来保持请求,直到在它们之前输入请求finishes@Rash我现在遇到了上面提到的问题,不知道为什么,但问题是存在的。啊,明白了。我只是假设你想要每个用户。在这种情况下,您已经得到了答案:)
    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();
    })