Какие основные модули и части входят в архитектуру фреймворка 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 использует декораторы для декларативного описания поведения и связей между частями приложения.