Запропонувати правкуПокращити цю статтюДопрацюйте відповідь до «Основні частини застосунку». Ваші зміни проходять модерацію перед публікацією.Потрібне підтвердженняКонтентЩо ви змінюєте🇺🇸EN🇺🇦UAПереглядЗаголовок (UA)Коротка відповідь (UA)Застосунок NestJS складається з чотирьох основних частин: модулів (групують пов'язаний код), контролерів (приймають запити й повертають відповіді), провайдерів (реалізують бізнес-логіку, керовані DI) і декораторів (`@Module()`, `@Controller()`, `@Injectable()`, `@Get()` тощо, що додають метадані). **Ключове:** окрім цих чотирьох, у реальних застосунках додаються pipes (валідація вводу), guards (контроль доступу), interceptors (перехоплення запитів/відповідей), filters (обробка помилок) і middleware (виконується до маршрутизації).Показується над повною відповіддю для швидкого нагадування.Відповідь (UA)ЗображенняЗастосунок **NestJS** складається з **чотирьох основних частин**, які разом утворюють архітектурний каркас фреймворка. Кожна з них виконує свою роль у побудові логічно ізольованих, але взаємопов'язаних шарів. ## 1. Модулі (Modules) **Модуль** - це контейнер, який групує пов'язані елементи застосунку: контролери, сервіси, фільтри, пайпи тощо. Кожен застосунок NestJS **завжди має щонайменше один модуль -** `AppModule` (кореневий). ### Приклад: ```javascript import { Module } from '@nestjs/common'; import { UsersModule } from './users/users.module'; import { AuthModule } from './auth/auth.module'; @Module({ imports: [UsersModule, AuthModule], }) export class AppModule {} ``` **Роль:** - визначає межі функціональності; - інкапсулює залежності; - забезпечує масштабованість (можна додавати нові модулі без переписування старих). ## 2. Контролери (Controllers) **Контролери** приймають **вхідні запити** (наприклад, HTTP-запити) і повертають **відповіді клієнту**. Вони визначають **роути (ендпоінти)** і передають виконання на **сервіси**. ### Приклад: ```javascript import { Controller, Get } from '@nestjs/common'; import { UsersService } from './users.service'; @Controller('users') export class UsersController { constructor(private readonly usersService: UsersService) {} @Get() findAll() { return this.usersService.findAll(); } } ``` **Роль:** - точка входу запитів (HTTP, WebSocket, GraphQL та ін.); - не містить бізнес-логіки - лише маршрутизацію й передачу даних у сервіси. ## 3. Провайдери (Providers) **Провайдер** - це **будь-яка сутність, яку можна впровадити через Dependency Injection**. Найчастіший приклад - **сервіс**, де зберігається бізнес-логіка. ### Приклад: ```javascript import { Injectable } from '@nestjs/common'; @Injectable() export class UsersService { private users = [{ id: 1, name: 'Alex' }]; findAll() { return this.users; } } ``` **Роль:** - реалізують бізнес-логіку; - надають дані й функціонал іншим класам; - керуються DI-контейнером NestJS. ## 4. Декоратори (Decorators) **Декоратори** - це ключова особливість NestJS, яка дозволяє писати декларативний і читабельний код. Вони додають **метадані**, щоб Nest розумів, як обробляти клас чи метод. ### Приклади декораторів: | Декоратор | Призначення | |---|---| | `@Module()` | описує модуль | | `@Controller()` | визначає контролер | | `@Injectable()` | позначає клас як провайдер | | `@Get()`, `@Post()`, `@Put()` | задають HTTP-маршрути | | `@Body()`, `@Param()`, `@Query()` | витягують дані із запиту | | `@UseGuards()`, `@UseInterceptors()` | підключають middleware-подібні механізми | **Роль:** - спрощують архітектуру, роблячи код декларативним і самодокументованим. ## Взаємозв'язок компонентів ```javascript [ Клієнт ] ↓ [ Контролер ] → отримує запит ↓ [ Сервіс / Провайдер ] → обробляє дані й бізнес-логіку ↓ [ Модуль ] → керує залежностями й збіркою компонентів ↓ [ Відповідь клієнту ] ``` ## Додаткові елементи NestJS (допоміжні рівні) Хоча чотири основні частини - це фундамент, у реальних застосунках часто використовуються й інші важливі компоненти: | Компонент | Опис | |---|---| | Pipes (пайпи) | Перетворюють і валідують вхідні дані | | Guards (гварди) | Контролюють доступ (наприклад, авторизація) | | Interceptors (інтерсептори) | Перехоплюють запити/відповіді, додають логіку | | Filters (фільтри) | Обробляють помилки | | Middlewares | Працюють до маршрутизації (наприклад, логування) | ## Підсумкова структура типового застосунку ```javascript src/ ├── app.module.ts ├── users/ │ ├── users.module.ts │ ├── users.controller.ts │ └── users.service.ts ├── auth/ │ ├── auth.module.ts │ ├── auth.controller.ts │ └── auth.service.ts └── main.ts ← точка входу (bootstrap застосунку) ``` ## Підсумок | Компонент | Призначення | |---|---| | Module | Групує й керує залежностями | | Controller | Приймає запити й надсилає відповіді | | Provider (Service) | Реалізує бізнес-логіку | | Decorator | Визначає поведінку й структуру компонентів |Для рев’юераПримітка для модератора (необов’язково)Бачить лише модератор. Прискорює рев’ю.