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