Що таке Express router і як його використовувати для модульного маршрутизації?
Express Router
express.Router() — це міні-додаток Express, який обробляє лише маршрутизацію та проміжне програмне забезпечення. Він дозволяє розділити ваші маршрути на окремі файли, зберігаючи вашу кодову базу модульною та легкою в обслуговуванні.
Проблема без Router
js
// app.js — все в одному файлі (погано для великих додатків)
app.get('/users', ...)
app.post('/users', ...)
app.get('/users/:id', ...)
app.get('/products', ...)
app.post('/products', ...)
// сотні маршрутів...Рішення: Express Router
src/
app.js
routes/
users.routes.js
products.routes.js
auth.routes.js
controllers/
users.controller.jsСтворення Router
js
// routes/users.routes.js
const express = require('express');
const router = express.Router();
// Маршрути відносні до точки монтування
router.get('/', (req, res) => {
res.json({ users: [] });
});
router.get('/:id', (req, res) => {
res.json({ id: req.params.id });
});
router.post('/', (req, res) => {
res.status(201).json({ created: req.body });
});
router.put('/:id', (req, res) => {
res.json({ updated: req.params.id });
});
router.delete('/:id', (req, res) => {
res.status(204).send();
});
module.exports = router;Монтування Router
js
// app.js
const express = require('express');
const usersRouter = require('./routes/users.routes');
const productsRouter = require('./routes/products.routes');
const authRouter = require('./routes/auth.routes');
const app = express();
app.use(express.json());
// Монтуємо маршрутизатори за префіксами
app.use('/api/v1/users', usersRouter);
app.use('/api/v1/products', productsRouter);
app.use('/api/v1/auth', authRouter);
// GET /api/v1/users → usersRouter GET /
// GET /api/v1/users/42 → usersRouter GET /:id
// POST /api/v1/users → usersRouter POST /
app.listen(3000);Проміжне програмне забезпечення на рівні маршрутизатора
js
// routes/admin.routes.js
const express = require('express');
const router = express.Router();
const { requireAdmin } = require('../middleware/auth');
// Застосувати проміжне програмне забезпечення до ВСІХ маршрутів у цьому маршрутизаторі
router.use(requireAdmin);
router.get('/users', getAllUsers);
router.delete('/users/:id', deleteUser);
module.exports = router;Ланцюгові обробники маршрутів (.route())
js
router.route('/users/:id')
.get(getUser)
.put(updateUser)
.patch(patchUser)
.delete(deleteUser);
// Чистіше, ніж повторювати router.get, router.put тощо.Маршрутизатор з шаблоном контролера
js
// controllers/users.controller.js
const getUsers = (req, res) => res.json({ users: [] });
const getUser = (req, res) => res.json({ id: req.params.id });
const createUser = (req, res) => res.status(201).json(req.body);
module.exports = { getUsers, getUser, createUser };
// routes/users.routes.js
const { getUsers, getUser, createUser } = require('../controllers/users.controller');
const router = express.Router();
router.get('/', getUsers);
router.get('/:id', getUser);
router.post('/', createUser);
module.exports = router;Резюме
Express Router є ключем до масштабованих додатків Express. Кожен маршрутизатор є самостійним модулем для певної області функціонування. Монтуйте маршрутизатори за допомогою app.use(prefix, router), щоб створити чисті, легкі в обслуговуванні ієрархії маршрутів.
Коротка відповідь
Для співбесідиPremium
Коротка відповідь допоможе вам впевнено відповідати на цю тему під час співбесіди.