intermediate
Express routing
Проектируйте route trees с method matching, path parameters, router mounting, handler composition и clear resource boundaries.
Express сопоставляет HTTP methods и path patterns с handler functions. Маршруты объявляют на app или на `express.Router()`, смонтированных по префиксам — так границы ресурсов остаются явными, а дерево маршрутов модульным.
const users = express.Router({ mergeParams: true });
users.get('/:id', getUser);
users.post('/', createUser);
app.use('/api/users', users);
Path params (`:id`), optional params и regex segments захватывают данные URL. `mergeParams: true` даёт вложенным router доступ к parent params. Method-specific handlers (`app.get`, `app.post`) срабатывают только для подходящих глаголов; `app.all` — для любого метода.
На интервью: порядок регистрации (побеждает первое совпадение), mounting router для feature modules и почему handlers должны быть thin — validation и domain logic в middleware или services.
Типовые ошибки: перекрывающиеся маршруты, где широкий pattern затеняет конкретный; забытый `mergeParams`; бизнес-логика прямо в route callbacks.
Компромисс — между простотой, производительностью, безопасностью и эксплуатацией: назовите, что оптимизировали и какую цену приняли.
Чеклист:
- Группируйте маршруты по ресурсу через Router.
- Thin handlers; делегируйте в services.
- Единообразные имена params во вложенных router.
- Документируйте public vs protected маршруты.