Запропонувати правкуПокращити цю статтюДопрацюйте відповідь до «Що таке контролер в NestJS?». Ваші зміни проходять модерацію перед публікацією.Потрібне підтвердженняКонтентЩо ви змінюєте🇺🇸EN🇺🇦UAПереглядЗаголовок (UA)Коротка відповідь (UA)Контролер - клас, що відповідає за обробку вхідних запитів і формування відповідей клієнту: визначає API-ендпоінти через декоратори (`@Controller()`, `@Get()`, `@Post()` тощо), витягує параметри/тіло/заголовки й делегує бізнес-логіку сервісам, які отримує через конструктор (DI). **Ключове:** контролер має бути "тонким" - вирішувати лише "кому передати", а не "що робити"; кожен контролер зазвичай пов'язаний із конкретним модулем (наприклад, `UsersController` в `UsersModule`).Показується над повною відповіддю для швидкого нагадування.Відповідь (UA)Зображення**Контролер (Controller)** в NestJS - це **клас, який відповідає за обробку вхідних запитів і формування відповідей клієнту**. Саме контролери визначають **ендпоінти API** (наприклад, `/users`, `/auth/login`) і зв'язують зовнішній світ (HTTP, WebSocket тощо) із внутрішньою логікою застосунку (сервісами, репозиторіями тощо). ## Основна ідея Контролер - це **вхідна точка** твого backend-застосунку. Він: - приймає **запит** (HTTP, GraphQL, WebSocket); - витягує параметри, тіло, заголовки тощо; - викликає **сервіси** чи інші провайдери, де зберігається бізнес-логіка; - повертає **відповідь** клієнту. Контролери не повинні містити складну бізнес-логіку - вони делегують її сервісам. ## Приклад простого контролера ```javascript import { Controller, Get, Post, Body, Param } from '@nestjs/common'; import { UsersService } from './users.service'; @Controller('users') // усі маршрути починаються з /users export class UsersController { constructor(private readonly usersService: UsersService) {} @Get() // GET /users findAll() { return this.usersService.findAll(); } @Get(':id') // GET /users/:id findOne(@Param('id') id: string) { return this.usersService.findOne(id); } @Post() // POST /users create(@Body() body: { name: string; email: string }) { return this.usersService.create(body); } } ``` ## Як працюють маршрути | Декоратор | HTTP метод | Приклад URL | Опис | |---|---|---|---| | `@Get()` | GET | `/users` | Отримати дані | | `@Post()` | POST | `/users` | Створити новий запис | | `@Put()` | PUT | `/users/:id` | Повністю оновити запис | | `@Patch()` | PATCH | `/users/:id` | Частково оновити запис | | `@Delete()` | DELETE | `/users/:id` | Видалити запис | ## Основні декоратори для контролерів | Декоратор | Призначення | |---|---| | `@Controller('path')` | Визначає базовий шлях для всіх маршрутів контролера | | `@Get()`, `@Post()`, `@Put()`, `@Delete()` | Визначають тип запиту | | `@Param()` | Витягує параметри з URL (`/users/:id`) | | `@Body()` | Витягує тіло запиту (JSON) | | `@Query()` | Витягує query-параметри (`?page=2&limit=10`) | | `@Headers()` | Доступ до заголовків запиту | | `@Req()` / `@Res()` | Доступ до об'єктів `request` і `response` (Express/Fastify) | | `@HttpCode()` | Явно задає статус відповіді | | `@UseGuards()` | Підключає guards (наприклад, автентифікацію) | | `@UseInterceptors()` | Перехоплює й змінює запит/відповідь | ## Взаємодія контролера й сервісу Контролер **завжди звертається до сервісу**, щоб не дублювати бізнес-логіку: ```javascript // users.service.ts @Injectable() export class UsersService { private users = [{ id: 1, name: 'John' }]; findAll() { return this.users; } findOne(id: string) { return this.users.find(u => u.id === +id); } create(user) { this.users.push({ id: Date.now(), ...user }); return user; } } ``` ## Ключові принципи контролерів 1. **Контролер - це шар маршрутизації.** Він визначає, які методи викликаються при зверненні до конкретних URL. 2. **Мінімум логіки.** Контролер не повинен вирішувати "що робити", а лише "кому передати". 3. **Ін'єкція залежностей.** Контролер отримує сервіси через конструктор (`constructor(private service: ServiceName)`). 4. **Інкапсуляція.** Кожен контролер зазвичай пов'язаний із конкретним модулем (наприклад, `UsersController` в `UsersModule`). ## Приклад структури проєкту з контролером ```javascript src/ ├── users/ │ ├── users.controller.ts ← контролер │ ├── users.service.ts ← бізнес-логіка │ └── users.module.ts ← об'єднує обидва └── app.module.ts ``` ## Підсумок | Поняття | Опис | |---|---| | Контролер | Обробляє запити й повертає відповіді | | Роль | Вхідна точка застосунку, що зв'язує зовнішній світ з логікою | | Головний принцип | Делегує бізнес-логіку сервісам | | Інструменти | HTTP-декоратори, DI, Guards, Interceptors, Pipes |Для рев’юераПримітка для модератора (необов’язково)Бачить лише модератор. Прискорює рев’ю.