【问题标题】:Is it possible to force Node.js/Express to process requests sequentially?是否可以强制 Node.js/Express 按顺序处理请求?
【发布时间】:2022-01-31 20:27:52
【问题描述】:

我接手了一个项目,其中开发人员并不完全了解 Node.js 的工作原理,因此他们创建了使用 Mongoose 访问 MongoDB 的代码,当您有任何并发​​请求到达同一端点/修改时,这将在数据库中留下不一致的数据相同的数据。该项目使用 Express Web 框架。

我已经指示他们对此进行修复(基本上,将 Mongoose 事务支持与自动管理的可重试事务一起使用),但由于项目的规模,他们将花费大量时间来修复它。

我需要尽快将它投入生产,所以我想如果我能够保证传入请求的顺序处理,我可以尝试这样做。我完全知道这是一件坏事,但这只是一个临时解决方案(并发用户数量很少),直到适当的修复到位。

那么有没有办法让 Node.js 以顺序方式处理传入的请求?我只是基本上不希望来自不同请求的代码交错运行,或者换一种说法,我不希望非阻塞操作(.then()/await)屈服于另一个任务,而是阻塞直到异步操作结束,因此每个请求都在处理另一个请求之前被完全处理。

【问题讨论】:

    标签: node.js express mongoose async-await concurrency


    【解决方案1】:

    我有一个 NPM 包可以做到这一点:https://www.npmjs.com/package/async-await-queue

    创建一个限制为 1 个并发用户的队列,并将调用 Mongo 的代码附在 wait()/end()

    或者您也可以使用异步互斥锁,还有一些 NPM 包。

    【讨论】:

    • 我不确定我是否理解...我正在搜索服务器级别的内容,可能是 HTTP 服务器或 Express 应用程序的一些配置选项。我不想修改控制器中的代码,因为他们已经在这样做以实现正确的修复。
    • 我不知道有什么方法可以在不修改代码的情况下做到这一点
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-08-28
    • 1970-01-01
    • 1970-01-01
    • 2018-08-24
    • 2017-06-16
    • 2011-02-17
    • 1970-01-01
    相关资源
    最近更新 更多