🚀 Введение в NestJS: создание серверных приложений 0:00
NestJS — это прогрессивный фреймворк для Node.js, предназначенный для создания масштабируемых и поддерживаемых серверных приложений на TypeScript. По мнению автора курса, разработчика по имени Дон, NestJS предлагает более структурированный и надежный подход по сравнению с базовыми приложениями на Express. Фреймворк использует модульную архитектуру, систему внедрения зависимостей (Dependency Injection) и декораторы, что делает код чистым и тестируемым. В данном руководстве рассматривается процесс создания функционала профилей для дейтинг-приложения Dev Match, охватывающий все основные аспекты работы с NestJS: от настройки проекта до обработки ошибок и валидации данных.
🏗️ Начало работы и архитектура проекта 5:16
Для быстрой настройки проекта рекомендуется использовать официальный интерфейс командной строки (CLI) NestJS, который автоматически создает правильную структуру каталогов и обеспечивает лучшие практики кодирования.
- Инициализация: Команда CLI создает новый проект, настраивает TypeScript и устанавливает необходимые зависимости.
- Модульность: В NestJS приложения организованы по модулям, которые позволяют разграничивать функционал (например, модуль профилей) и поддерживать чистоту кода.
- Контроллеры: Отвечают за обработку входящих HTTP-запросов и делегирование логики сервисным слоям.
- Декораторы: Это метаданные, которые добавляют поведение функциям или классам. В NestJS они широко используются для маршрутизации и настройки компонентов.
🛠️ Работа с HTTP-запросами: контроллеры и DTO 10:16
Контроллеры определяют маршруты API, используя декораторы методов, такие как @Get(), @Post(), @Put() и @Delete(). Для передачи данных между клиентом и сервером используются объекты передачи данных (Data Transfer Objects, DTO).
- DTO (Data Transfer Object): Это классы, описывающие «форму» данных, которую ожидает эндпоинт. Использование классов вместо интерфейсов позволяет NestJS использовать метаданные во время выполнения, что важно для валидации.
- Обработка параметров: NestJS позволяет легко извлекать параметры запроса через декораторы
@Query()(для параметров строки запроса) и@Param()(для параметров пути). - Коды ответов: По умолчанию контроллеры возвращают статус 200, однако для определенных операций (например, создание — 201, отсутствие контента — 204) можно использовать декоратор
@HttpCode().
⚙️ Бизнес-логика: сервисный слой 29:36
Сервисы — это провайдеры, в которых сосредоточена основная бизнес-логика приложения. Они помечаются декоратором @Injectable(), что позволяет внедрять их в контроллеры или другие сервисы с помощью системы Dependency Injection.
- Разделение ответственности: Контроллер лишь принимает запрос и вызывает метод сервиса, который отвечает за хранение и поиск данных.
- Инъекция зависимостей: NestJS автоматически управляет созданием экземпляров сервисов, что избавляет разработчика от ручного создания объектов.
🛡️ Обработка ошибок и валидация 55:16
Надежное API должно корректно обрабатывать исключительные ситуации. NestJS предоставляет встроенную систему обработки ошибок, которая перехватывает исключения и возвращает клиенту адекватные ответы.
- HTTP Exception: При ошибках (например, профиль не найден) можно выбрасывать специальные исключения, такие как
NotFoundException, которые автоматически трансформируются в 404 статус. - Pipes: Трубы (pipes) используются для трансформации данных (например, приведение строки к формату UUID) и валидации.
- Валидация: С библиотеками
class-validatorиclass-transformerможно добавлять декораторы (например,@MinLength()) к свойствам DTO для автоматической проверки входных данных. - Guards: Стражи (guards) используются для контроля доступа (авторизации) и определяют, разрешено ли выполнение конкретного запроса.