Skip to main content

Що таке контролери в 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

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