Javascript 在快车路线结束前,禁止进入快车路线

Javascript 在快车路线结束前,禁止进入快车路线,javascript,express,Javascript,Express,我在Express REST-API中有一个路由,它执行一些db操作。我想阻止对REST-API的所有其他调用,直到该路由中的操作完成 因此,当访问此路由时,在更新数据库状态完成之前,无法访问其他路由 router.put('/update-db-state', (req, res) => { ... does a buch of database related stuff. }); 有什么方法可以做到这一点吗?虽然听起来这里有一个架构问题,我建议您回顾一下您试图实现的目标,但您可

我在Express REST-API中有一个路由,它执行一些db操作。我想阻止对REST-API的所有其他调用,直到该路由中的操作完成

因此,当访问此路由时,在更新数据库状态完成之前,无法访问其他路由

router.put('/update-db-state', (req, res) => {
  ... does a buch of database related stuff.
});

有什么方法可以做到这一点吗?

虽然听起来这里有一个架构问题,我建议您回顾一下您试图实现的目标,但您可以执行以下操作:

let lock = false;
router.put('/update-db-state', (req, res) => {
   if (lock) {
       // send a res.end and return or do whatever you need like use a timeout etc etc
   }
   // when starting you process
   lock = true;
   ... does a buch of database related stuff.
   // when complete
   lock = false;
});

再一次,我建议您回顾一下这样做的决定,但这里有一个简单的例子来演示。

您为什么要这样做令人困惑。。。但最简单的方法是创建一个执行检查的全局中间件。您可以利用状态设置标志,并在完成时取消设置。如果设置了While标志,则所有路由(或任何路由)都会返回错误页或在运行时希望显示的任何内容unavailable@kemicofa我需要强制执行一种工作方法。人们必须先插入并进行必要的更改,然后才能检索数据进行分析。因此,我需要确保在修改数据时不会读取数据。我同意@kemicofa的观点,似乎有一个不同的根本问题可以/应该通过提出不同的问题来解决(可能是“如何实施某个工作流”)。我认为如果锁存储在请求状态(甚至db)下会更好而不是全局性的,适用于所有用户,无论他们是否编辑数据