← Назад к вопросам
Что такое модуль в NestJS?
1.3 Junior🔥 171 комментариев
#Архитектура и паттерны#Фреймворки и библиотеки
Комментарии (1)
🐱
claude-haiku-4.5PrepBro AI30 мар. 2026 г.(ред.)
Ответ сгенерирован нейросетью и может содержать ошибки
Что такое модуль в NestJS?
Модуль в NestJS — это класс, украшенный декоратором @Module(), который организует приложение в логические блоки переиспользуемого функционала. Это основная единица организации кода в NestJS, аналогично модулям в других фреймворках.
Структура модуля
import { Module } from '@nestjs/common';
import { UsersController } from './users.controller';
import { UsersService } from './users.service';
@Module({
imports: [], // Другие модули, которые нужны этому модулю
controllers: [], // Контроллеры этого модуля
providers: [], // Сервисы и другие провайдеры (Dependency Injection)
exports: [] // Что экспортируется для других модулей
})
export class UsersModule {}
Основные свойства модуля
- imports — импортирование других модулей
- controllers — контроллеры, обрабатывающие HTTP запросы
- providers — сервисы, репозитории, фабрики (всё для DI контейнера)
- exports — что модуль предоставляет другим модулям
Пример полнофункционального модуля
import { Module } from '@nestjs/common';
import { TypeOrmModule } from '@nestjs/typeorm';
import { UsersController } from './users.controller';
import { UsersService } from './users.service';
import { User } from './user.entity';
@Module({
imports: [TypeOrmModule.forFeature([User])], // Импортируем базу данных
controllers: [UsersController],
providers: [UsersService],
exports: [UsersService] // Другие модули могут использовать UsersService
})
export class UsersModule {}
Типы модулей
Feature модули — модули для конкретных фич (Users, Products, Orders):
@Module({
imports: [DatabaseModule],
controllers: [ProductsController],
providers: [ProductsService],
exports: [ProductsService]
})
export class ProductsModule {}
Shared модули — переиспользуемые модули (общие утилиты, конфиги):
@Module({
providers: [CommonService],
exports: [CommonService]
})
export class SharedModule {}
Глобальные модули — видны везде без явного импорта:
import { Global, Module } from '@nestjs/common';
@Global()
@Module({
providers: [ConfigService],
exports: [ConfigService]
})
export class ConfigModule {}
Dependency Injection в модулях
// users.service.ts
import { Injectable } from '@nestjs/common';
import { InjectRepository } from '@nestjs/typeorm';
import { Repository } from 'typeorm';
import { User } from './user.entity';
@Injectable()
export class UsersService {
constructor(
@InjectRepository(User)
private usersRepository: Repository<User>
) {}
async findAll() {
return this.usersRepository.find();
}
}
Root модуль (App Module)
import { Module } from '@nestjs/common';
import { TypeOrmModule } from '@nestjs/typeorm';
import { ConfigModule } from '@nestjs/config';
import { UsersModule } from './users/users.module';
import { ProductsModule } from './products/products.module';
@Module({
imports: [
ConfigModule.forRoot(), // Глобальный конфиг
TypeOrmModule.forRoot({ /* конфиг БД */ }),
UsersModule,
ProductsModule
],
controllers: [],
providers: [],
})
export class AppModule {}
Преимущества модульной архитектуры
- Инкапсуляция — код разделён по логическим блокам
- Переиспользование — модули легко переносить между проектами
- Тестирование — каждый модуль тестируется отдельно
- Масштабируемость — приложение растёт структурировано
- Dependency Injection — NestJS автоматически управляет зависимостями
Модули — это основа архитектуры NestJS, позволяющей создавать чистый, масштабируемый и поддерживаемый код.