Router
Тема дорожной карты · Node.js
Router в Express.js — это мини-приложение Express.js, предоставляющее модульный, подключаемый набор обработчиков маршрутов. Это позволяет организовывать серверные кодовые базы Node.js в отдельные файлы по функциональности или ресурсу, а не размещать все маршруты в одном файле. Экземпляр express.Router() поддерживает те же методы .get(), .post(), .put(), .delete() и .use(), что и основное приложение Express.js, и подключается к приложению через app.use('/api/users', userRouter), добавляя префикс ко всем маршрутам роутера. Роутеры Express.js могут содержать собственное middleware — например, роутер администратора может применять middleware аутентификации, действующее только для маршрутов администратора и не затрагивающее публичные маршруты. Middleware уровня роутера и параметры маршрутов (например, /users/:id), определённые в express.Router(), ограничены областью действия этого роутера, что обеспечивает инкапсуляцию логики маршрутов и возможность их изолированного тестирования. Использование express.Router() является лучшей практикой структурирования крупных серверных REST API на Node.js, построенных на Express.js.
Как это работает
Router — самый широко используемый Node HTTP-фреймворк: минималистичный, middleware-based, route-based. Запрос проходит через стек middleware-функций; каждая зовёт next() для передачи управления. app.get("/path", handler) регистрирует роут; app.use(middleware) монтирует middleware. Современные альтернативы: Fastify (быстрее, schema-based, JSON-first), Koa (духовный преемник Express, async-native), Hono (edge-runtime ready), NestJS (opinionated, decorator-based).
Когда применять
Express — для legacy-сервисов и быстрых прототипов; его доки и middleware-экосистема непревзойдены. Fastify — для новых performance-чувствительных API (2-3x throughput, встроенная schema-валидация). NestJS — для больших командных проектов с пользой от конвенций. Всегда добавляйте helmet, rate-limit, лимит размера body — у Express нет безопасных дефолтов. Валидируйте input (zod, ajv) до любой записи в БД.
Типичные ошибки
Ловушки Router: забытый response — запрос висит вечно (ставьте timeouts); express.json({limit: "100mb"}) (DoS-вектор); нет глобального error-handler (app.use((err, req, res, next) => ...)); не выставлен app.disable("x-powered-by") (fingerprinting); баги в порядке middleware (auth должен быть до handler). Прочтите Express security best practices один раз.