Що таке контролери в Express-застосунках?
Якщо коротко:
Контролер - це місце, де відбувається основна логіка обробки запиту й формування відповіді клієнту.
1. Що таке контролер в Express
В Express.js контролер - це функція (чи набір функцій),
яка викликається, коли користувач звертається до певного маршруту (route).
Вона:
- приймає об'єкти
req(запит) іres(відповідь); - викликає потрібні сервіси, моделі чи бази даних;
- повертає користувачу відповідь (JSON, HTML, файл тощо);
- за потреби - обробляє помилки.
Приклад простого контролера
javascript
// controllers/userController.js
exports.getAllUsers = async (req, res, next) => {
try {
const users = await User.find(); // звернення до моделі
res.json(users); // відправка відповіді клієнту
} catch (err) {
next(err); // передача помилки в middleware
}
};І підключення цього контролера в маршруті:
javascript
// routes/users.js
const express = require('express');
const router = express.Router();
const userController = require('../controllers/userController');
router.get('/', userController.getAllUsers);
module.exports = router;Тепер GET /users → викликає функцію getAllUsers() із контролера.
2. Що робить контролер
| Етап | Що робить |
|---|---|
| Отримує дані | Читає параметри запиту: req.params, req.query, req.body, req.headers |
| Викликає бізнес-логіку | Через сервіси чи моделі (робота з базою даних, перевірка умов, авторизація тощо) |
| Формує відповідь | Надсилає клієнту res.json(), res.status(), res.send(), res.redirect() тощо |
| Обробляє помилки | Через try...catch і next(err) для передачі в error middleware |
3. Навіщо потрібні контролери
| Причина | Пояснення |
|---|---|
| Розділення обов'язків | Контролер займається обробкою запитів, а не маршрутизацією. |
| Чистота коду | Код у routes лишається мінімальним і зрозумілим. |
| Повторне використання | Один і той самий контролер можна підключити в різні маршрути чи проєкти. |
| Спрощення тестування | Контролери можна тестувати незалежно від Express-застосунку. |
| Масштабованість | Коли API росте, контролери можна розділити по модулях (users, products, orders…). |
4. Приклад структури Express-застосунку з контролерами
javascript
src/
├── app.js
├── routes/
│ ├── users.js
│ ├── products.js
│ └── auth.js
├── controllers/
│ ├── userController.js
│ ├── productController.js
│ └── authController.js
├── services/
│ ├── userService.js
│ └── productService.js
├── middlewares/
│ ├── authMiddleware.js
│ └── errorHandler.js
└── db/
└── index.jsТут:
routes/- лише визначає шляхи (/users,/productsтощо);controllers/- містить функції, які виконуються при зверненні до цих маршрутів;services/- містить бізнес-логіку (роботу з БД, API тощо).
5. Приклад контролера рівня продакшн
javascript
// controllers/productController.js
const productService = require('../services/productService');
exports.createProduct = async (req, res, next) => {
try {
const product = await productService.create(req.body);
res.status(201).json(product);
} catch (err) {
next(err); // централізована обробка помилок
}
};
exports.getProduct = async (req, res, next) => {
try {
const product = await productService.getById(req.params.id);
if (!product) return res.status(404).json({ message: 'Not found' });
res.json(product);
} catch (err) {
next(err);
}
};6. Підсумок
Контролери - це функції, які виконують основну роботу при обробці HTTP-запиту: отримують дані від клієнта, викликають бізнес-логіку й повертають відповідь.
Їхнє основне призначення:
- відокремити маршрути від логіки;
- зробити код структурним, зрозумілим і масштабованим;
- дозволити тестувати й перевикористовувати обробники незалежно від Express.
Коротка відповідь
Для співбесідиPremium
Коротка відповідь допоможе вам впевнено відповідати на цю тему під час співбесіди.