Javascript 从Mongoose插件中的Express访问请求对象

Javascript 从Mongoose插件中的Express访问请求对象,javascript,node.js,express,mongoose,Javascript,Node.js,Express,Mongoose,我在ExpressJS中有一个API和一个在每个端点控制器之前执行的中间件: app.use(segregationMiddleware); app.get('/some-endpoint', controller1); app.get('/some-endpoint-2', controller2); segrationmiddleware用于查找请求中的一些参数,然后计算一个值,该值作为req.locals.domain存储在请求对象中,以便控制器可以访问它 在每个Mongoose模型中

我在ExpressJS中有一个API和一个在每个端点控制器之前执行的中间件:

app.use(segregationMiddleware);

app.get('/some-endpoint', controller1);
app.get('/some-endpoint-2', controller2);
segrationmiddleware
用于查找请求中的一些参数,然后计算一个值,该值作为
req.locals.domain
存储在请求对象中,以便控制器可以访问它

在每个Mongoose模型中,我使用Mongoose插件定义了一个名为
domain
的字段(因此我不必每次都这么做)。该字段用于隔离我的资产。这意味着,当
segrationmiddleware
填充
req.locals.domain='foo'
时,例如,如果我创建了
model.find({})
,我只想获取具有
{domain:'foo'}
的资产。如果我尝试更新、保存、删除等等,也会发生同样的事情

当然,我可以简单地修改每个控制器上的查询,因为我有权访问
req
,但我每次都需要这样做,并且我需要记住它以进行查找、查找、更新、保存和soo。。。迟早我会忘记的

我可以在Mongoose中定义一些钩子,这些钩子将使用插件修改查询,因此它将
约束添加到查询中,这样我就不必在控制器中执行此操作,但我在Mongoose插件中没有当前的
req
对象,除非我传递它,我想到的唯一方法是在插件中抽象DB方法,所以在控制器中,我做了如下操作:

model.safeFind(req, query);
在插件中,我定义了
safeFind
如下:

safeFind = () => {
  const theRealQuery = Object.assign({}, query, { domain: req.locals.domain });
  return this.find(query);
}
但是,通过这种方式,我需要重新定义每个DB查询函数(find、findOne、update、save…),并且我需要记住使用安全方法。再说一次,我迟早会忘记的

是否有一种方法可以让我仍然使用控制器中的常规Mongoose方法,并让插件使用当前
req
对象以某种方式修改每个方法的查询