← Назад к вопросам

Что такое модуль в 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 {}

Основные свойства модуля

  1. imports — импортирование других модулей
  2. controllers — контроллеры, обрабатывающие HTTP запросы
  3. providers — сервисы, репозитории, фабрики (всё для DI контейнера)
  4. 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, позволяющей создавать чистый, масштабируемый и поддерживаемый код.