derbyparty/derby-faq

Как подписаться на несколько запросов одновременно?

Closed this issue · 3 comments

Я видел в группе совет про использование звездочки

app.get "*", (page, model, params, next)-> ... next()

Но он рабоатет только в пределах одного приложения. Если же в проекте несколько приложений, то происходят нерелевантные подписки.

Есть ли другие способы создать подписку на несколько запросов и раздать ее всем роутам в пределах приложения?

Ну какие есть варианты:

  1. Воспользоваться тем, что вместо * можно задавать регулярные выражения, но тогда роуты одного приложения четко должны отделяться от роутов другого (например, у роутов может быть префикс /admin/...)
  2. Абстрагировать роутинг - то есть создать некий объект router, который будет знать обо всех роутах приложения, и сам будет цеплять эти роуты к app. Тогда в этом router-е легко можно будет проверить, является ли роут роутом приложения и вызвать некий before обработчик. Мы у себя так и делаем - вынесли роутинг в отдельный класс (мы пишем на кофе), который может вызывать before. Правда у нас там еще одна степень абстракции, но не суть - в течение месяца (примерно) мы выложем свой роутер в опенсурс, сможете посмотреть, хотя сделать свой не так уж и трудно.

Артур, спасибо. А у приложения есть события? Например что-то вроде app.onBefreRequest можно как-то заюзать?

У приложения есть события, буквально сегодня Нейт (автор дерби) довольно значительно наполнил новыми событиями app - https://github.com/codeparty/derby/commits/master

Но у роутер событий вроде не генерирует. Если интересно, роутер в дерби - это модуль https://github.com/codeparty/tracks - кода там вообще не много, так что можете покопаться, поизучать.