Как подписаться на несколько запросов одновременно?
Closed this issue · 3 comments
Я видел в группе совет про использование звездочки
app.get "*", (page, model, params, next)-> ... next()
Но он рабоатет только в пределах одного приложения. Если же в проекте несколько приложений, то происходят нерелевантные подписки.
Есть ли другие способы создать подписку на несколько запросов и раздать ее всем роутам в пределах приложения?
Ну какие есть варианты:
- Воспользоваться тем, что вместо * можно задавать регулярные выражения, но тогда роуты одного приложения четко должны отделяться от роутов другого (например, у роутов может быть префикс /admin/...)
- Абстрагировать роутинг - то есть создать некий объект router, который будет знать обо всех роутах приложения, и сам будет цеплять эти роуты к app. Тогда в этом router-е легко можно будет проверить, является ли роут роутом приложения и вызвать некий before обработчик. Мы у себя так и делаем - вынесли роутинг в отдельный класс (мы пишем на кофе), который может вызывать before. Правда у нас там еще одна степень абстракции, но не суть - в течение месяца (примерно) мы выложем свой роутер в опенсурс, сможете посмотреть, хотя сделать свой не так уж и трудно.
Артур, спасибо. А у приложения есть события? Например что-то вроде app.onBefreRequest
можно как-то заюзать?
У приложения есть события, буквально сегодня Нейт (автор дерби) довольно значительно наполнил новыми событиями app - https://github.com/codeparty/derby/commits/master
Но у роутер событий вроде не генерирует. Если интересно, роутер в дерби - это модуль https://github.com/codeparty/tracks - кода там вообще не много, так что можете покопаться, поизучать.