Sobes.tech
Назад к вопросам
Junior — Middle
79

Какие основные модули и части входят в архитектуру фреймворка Nest.js?

Ответ от нейросети

sobes.tech AI

Что хотят услышать интервьюеры:

Nest.js строится вокруг модульной архитектуры: приложение разбивается на модули, а внутри них находятся контроллеры, сервисы и провайдеры. Для связки компонентов используются dependency injection и декораторы. Также в архитектуру входят middleware, pipes, guards, interceptors и exception filters.

Определение:

Nest.js — это фреймворк для Node.js, который организует приложение как набор модулей с четким разделением ответственности.
Основные части архитектуры:

  • Modules — логические блоки приложения, которые группируют связанные компоненты.
  • Controllers — принимают входящие HTTP-запросы и возвращают ответ.
  • Providers / Services — содержат бизнес-логику и доступ к данным.
  • Dependency Injection — механизм передачи зависимостей между классами.
  • Decorators — метаданные, которыми Nest описывает поведение классов и методов.
  • Middleware — обрабатывают запрос до попадания в контроллер.
  • Pipes — валидируют и преобразуют входные данные.
  • Guards — решают, можно ли пропустить запрос дальше, обычно для авторизации.
  • Interceptors — перехватывают выполнение до и после метода.
  • Exception Filters — централизованно обрабатывают ошибки.

Пример использования:

Типичное приложение может быть разделено на модули UsersModule и AuthModule.
UsersController принимает запросы /users, а UsersService работает с бизнес-логикой и базой данных.
AuthGuard проверяет доступ, а ValidationPipe проверяет DTO на корректность.

import { Module, Controller, Get, Injectable } from '@nestjs/common';

@Injectable()
class UsersService {
  getAll() {
    return ['Alice', 'Bob'];
  }
}

@Controller('users')
class UsersController {
  constructor(private readonly usersService: UsersService) {}

  @Get()
  findAll() {
    return this.usersService.getAll();
  }
}

@Module({
  controllers: [UsersController],
  providers: [UsersService],
})
class UsersModule {}

Пояснение кода:

  • @Injectable() помечает UsersService как провайдер, который может внедряться через DI.
  • UsersService хранит бизнес-логику и возвращает список пользователей.
  • @Controller('users') задает базовый маршрут для контроллера.
  • Конструктор UsersController получает UsersService через dependency injection.
  • @Get() описывает обработчик GET-запроса на /users.
  • @Module(...) объединяет контроллеры и провайдеры в один логический блок приложения.

Ключевые моменты:

  • Архитектура Nest.js строится вокруг модулей как основных единиц организации кода.
  • Контроллеры отвечают за транспортный слой, а сервисы/провайдеры — за бизнес-логику.
  • Dependency Injection — ключевой механизм, который делает компоненты слабо связанными и тестируемыми.
  • Middleware, pipes, guards, interceptors и filters решают сквозные задачи: валидацию, безопасность, обработку ошибок и изменение потока выполнения.
  • Nest.js использует декораторы для декларативного описания поведения и связей между частями приложения.