Доступ к объекту запроса из Express внутри подключаемого модуля Mon goose - PullRequest
1 голос
/ 26 мая 2020

У меня есть API в ExpressJS и промежуточное ПО, которое запускается перед каждым контроллером конечной точки:

app.use(segregationMiddleware);

app.get('/some-endpoint', controller1);
app.get('/some-endpoint-2', controller2);

segregationMiddleware используется для поиска некоторых параметров в запросе, а затем он вычисляет значение, которое затем сохраняется в объекте запроса как req.locals.domain, чтобы контроллеры могли получить к нему доступ.

В каждой модели Mon goose я определяю поле с именем domain, используя Mon goose плагин (так что мне не нужно делать это каждый раз). Это поле используется для разделения моих активов. Это означает, что когда segregationMiddleware заполняет, например, req.locals.domain = 'foo', если я создаю model.find({}), я хочу получить только активы, у которых есть { domain: 'foo' }. То же самое, если я попытаюсь обновить, сохранить, удалить и т. Д.

Конечно, я могу просто изменить запрос на каждом контроллере, поскольку у меня есть доступ к req, но мне нужно делать это каждый раз время, и мне нужно запомнить его для находок, findAndUpdate, save и так далее ... рано или поздно я это забуду.

Я могу определить некоторые хуки в Mon goose, которые изменят запрос используя плагин, поэтому он добавляет ограничение domain в запрос, поэтому мне не нужно делать это в контроллере, НО у меня нет текущего объекта req в плагине Mon goose, если я не передам его, и единственный способ, который приходит мне в голову, - это абстрагировать методы БД в плагине, поэтому в контроллере я делаю что-то вроде этого:

model.safeFind(req, query);

А в плагине я определяю safeFind как:

safeFind = () => {
  const theRealQuery = Object.assign({}, query, { domain: req.locals.domain });
  return this.find(query);
}

НО, таким образом, мне нужно переопределить каждую функцию запроса к БД (найти, найти, обновить, сохранить ...), и мне нужно не забыть использовать безопасные методы. Опять же, я рано или поздно забуду об этом.

Есть ли способ, которым я все еще могу использовать обычные методы Mon goose из контроллера и заставить плагин каким-то образом изменять запрос для каждого метода, используя текущий req объект?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...