Запропонувати правкуПокращити цю статтюДопрацюйте відповідь до «Що таке модуль в NestJS?». Ваші зміни проходять модерацію перед публікацією.Потрібне підтвердженняКонтентЩо ви змінюєте🇺🇸EN🇺🇦UAПереглядЗаголовок (UA)Коротка відповідь (UA)Модуль - це фундаментальний будівельний блок NestJS-застосунку: клас із декоратором `@Module()`, що групує пов'язані контролери, сервіси та інші провайдери, вказує, які модулі імпортує (`imports`) і що робить доступним іншим модулям (`exports`). **Ключове:** провайдери за замовчуванням доступні лише всередині свого модуля, поки їх явно не експортують, а кожен NestJS-застосунок обов'язково має кореневий модуль `AppModule`, який підключає решту.Показується над повною відповіддю для швидкого нагадування.Відповідь (UA)Зображення**Модуль (Module)** в NestJS - це **фундаментальний будівельний блок застосунку**, який групує логічно пов'язані частини коду: **контролери, сервіси, провайдери та інші модулі**. Він допомагає **структурувати проєкт**, зробити код **модульним, перевикористовуваним і легко підтримуваним**. ## Основна ідея модуля Модуль - це **клас із декоратором** `@Module()`, який повідомляє NestJS: - які компоненти (контролери, сервіси, провайдери) належать цьому модулю; - які залежності він імпортує з інших модулів; - які сутності він експортує назовні. ## Приклад простого модуля ```javascript import { Module } from '@nestjs/common'; import { UsersController } from './users.controller'; import { UsersService } from './users.service'; @Module({ imports: [], // Імпорт інших модулів controllers: [UsersController], // Контролери (обробляють запити) providers: [UsersService], // Сервіси, Guards, Pipes тощо exports: [UsersService], // Що доступно іншим модулям }) export class UsersModule {} ``` Цей модуль об'єднує `UsersController` і `UsersService` в одну логічну область - **роботу з користувачами**. ## Що міститься в модулі | Поле | Призначення | |---|---| | imports | Список інших модулів, чиї експортовані провайдери потрібні цьому модулю. | | controllers | Класи, які обробляють вхідні запити (наприклад, HTTP). | | providers | Класи, доступні через DI (сервіси, гварди, пайпи, резолвери, репозиторії тощо). | | exports | Те, що цей модуль "віддає назовні" для використання іншими модулями. | ## Навіщо потрібні модулі 1. **Організація коду** Проєкт ділиться на незалежні області: `UsersModule`, `AuthModule`, `ProductsModule` тощо. 2. **Повторне використання** Один і той самий модуль можна імпортувати в кількох місцях. 3. **Інкапсуляція** Провайдери за замовчуванням доступні **лише всередині свого модуля**, поки ти явно не експортуєш їх. 4. **Масштабованість** Великі проєкти можна легко розширювати, просто додаючи нові модулі. ## Головний модуль застосунку (`AppModule`) Кожен 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 {} ``` ## Приклад структури проєкту ```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 ``` ## Підсумок | Ключова ідея | Опис | |---|---| | Модуль - це контейнер для коду | Він об'єднує все, що стосується однієї функціональності | | Кожен застосунок Nest складається з модулів | Кореневий `AppModule` підключає решту | | Інкапсуляція й перевикористання | Модуль приховує внутрішні деталі й надає інтерфейс через `exports` |Для рев’юераПримітка для модератора (необов’язково)Бачить лише модератор. Прискорює рев’ю.