Що таке модуль в NestJS?
Модуль (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 | Те, що цей модуль "віддає назовні" для використання іншими модулями. |
Навіщо потрібні модулі
- Організація коду
Проєкт ділиться на незалежні області:
UsersModule,AuthModule,ProductsModuleтощо. - Повторне використання Один і той самий модуль можна імпортувати в кількох місцях.
- Інкапсуляція Провайдери за замовчуванням доступні лише всередині свого модуля, поки ти явно не експортуєш їх.
- Масштабованість Великі проєкти можна легко розширювати, просто додаючи нові модулі.
Головний модуль застосунку (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 |
Коротка відповідь
Для співбесідиPremium
Коротка відповідь допоможе вам впевнено відповідати на цю тему під час співбесіди.