Skip to main content

Що робить express.Router()?

1. Що робить express.Router()

express.Router() створює "міні-застосунок" (міні-інстанс Express), який уміє працювати так само, як app, але слугує для групування маршрутів і middleware.

Ідея: замість того щоб описувати всі маршрути в app.js, можна розділити їх по файлах і імпортувати в основний застосунок.

Приклад без Router (усе в одному файлі):

javascript
const express = require('express'); const app = express(); app.get('/users', (req, res) => res.send('Список користувачів')); app.get('/products', (req, res) => res.send('Список товарів')); app.listen(3000);

Мінус: код швидко стає громіздким.

2. Приклад із використанням express.Router()

Створюємо два окремих файли для маршрутів:

routes/users.js

javascript
const express = require('express'); const router = express.Router(); router.get('/', (req, res) => { res.send('Список користувачів'); }); router.get('/:id', (req, res) => { res.send(`Користувач з ID: ${req.params.id}`); }); module.exports = router;

routes/products.js

javascript
const express = require('express'); const router = express.Router(); router.get('/', (req, res) => { res.send('Список товарів'); }); router.post('/', (req, res) => { res.send('Товар створено'); }); module.exports = router;

app.js

javascript
const express = require('express'); const app = express(); const usersRouter = require('./routes/users'); const productsRouter = require('./routes/products'); // Підключаємо маршрутизатори з префіксом app.use('/users', usersRouter); app.use('/products', productsRouter); app.listen(3000, () => console.log('Сервер запущено'));

Тепер:

  • GET /users → "Список користувачів"
  • GET /users/42 → "Користувач з ID: 42"
  • GET /products → "Список товарів"
  • POST /products → "Товар створено"

3. Як працює Router всередині

Кожен Router - це екземпляр middleware, який містить у собі набір маршрутів і проміжних обробників. Коли Express отримує запит:

  1. Він перевіряє, чи відповідає шлях (/users, /products тощо).
  2. Якщо збігається - запит передається внутрішньому Router, де виконується свій власний "міні Event Loop" маршрутів і middleware.

4. Router підтримує все, що й app

МожливістьПрацює в Router?Приклад
MiddlewareТакrouter.use(authMiddleware)
МаршрутиТакrouter.get('/', handler)
ПараметриТакrouter.param('id', callback)
Підмодулі RouterТакrouter.use('/admin', adminRouter)

5. Навіщо використовувати Router - переваги

ПеревагаПояснення
МодульністьМожна розділити застосунок на логічні частини (користувачі, товари, замовлення тощо)
ПеревикористанняОдин Router можна підключити до різних застосунків
Читабельність і структураКод стає чистим, легким для навігації
Локальні middlewareМожна застосовувати middleware лише до конкретної групи маршрутів
ТестованістьСпрощує написання unit-тестів для окремих модулів API

6. Приклад: middleware лише для одного Router

javascript
const router = express.Router(); function authMiddleware(req, res, next) { if (req.headers.token === '123') next(); else res.status(401).send('Немає доступу'); } router.use(authMiddleware); // застосовується лише до маршрутів цього Router router.get('/secret', (req, res) => { res.send('Секретна зона'); }); module.exports = router;

Тепер перевірка авторизації застосовується лише до /secret, і не впливає на інші частини застосунку.

7. Підсумок

express.Router() - це міні-застосунок Express, який дозволяє групувати маршрути й middleware для певної частини API.

Використовується для:

  • організації коду (розділення по модулях);
  • підключення префіксів (app.use('/api/users', usersRouter));
  • додавання локальних middleware;
  • спрощення підтримки й тестування.

Майже будь-який великий Express-застосунок побудований на Router().

Коротка відповідь

Для співбесіди
Premium

Коротка відповідь допоможе вам впевнено відповідати на цю тему під час співбесіди.