Оглавление
NestJS
Фреймворк для серверных приложений на TypeScript: модули, контроллеры, сервисы и базы данных.
1.Начало работы
2.Модули, контроллеры и сервисы
- МодулиКак NestJS делит приложение на модули и как один модуль пользуется сервисом другого.
- Контроллеры и маршрутыКак контроллер связывает адреса и HTTP-методы с методами класса и что он возвращает клиенту.
- Параметры, query и тело запросаКак получить в методе контроллера часть адреса, параметры строки запроса и JSON из тела.
- DTO: описание входных данныхЧто такое DTO, почему это класс, а не интерфейс, и как описать данные для создания и изменения статьи.
- Сервисы и внедрение зависимостейГде хранить логику приложения, что такое провайдер и как NestJS сам передаёт сервис в контроллер.
3.Обработка запроса
- Валидация: ValidationPipe и class-validatorКак проверять тело запроса правилами в DTO и автоматически отвечать клиенту ошибкой 400.
- ПайпыВстроенные пайпы для преобразования параметров и как написать собственный пайп.
- Исключения и фильтры исключенийКак ответить клиенту ошибкой 404 или 400 и как изменить формат всех ответов с ошибкой.
- Промежуточные обработчики (middleware)Как выполнить код до любого контроллера: класс middleware, подключение в модуле и выбор маршрутов.
- ГардыКак разрешить или запретить вызов метода контроллера: интерфейс CanActivate и декоратор UseGuards.
- ПерехватчикиКак выполнить код до и после метода контроллера и изменить его ответ: интерфейс NestInterceptor и RxJS.
4.Настройки и база данных
- Настройки: @nestjs/config и .envКак хранить порт, пути и секретные ключи в файле .env и читать их через ConfigService.
- Подключение базы данных: TypeORMКак подключить к NestJS базу данных через TypeORM и модуль @nestjs/typeorm.
- Сущности и репозиторииКак описать таблицу классом-сущностью и читать и сохранять строки через репозиторий TypeORM.
- Связи: статьи и комментарииКак связать две сущности отношением один ко многим и загрузить статью вместе с комментариями.
- CRUD для статей от начала до концаПолный сервис и контроллер статей: список с постраничным выводом, просмотр, создание, изменение и удаление.
5.Пользователи и доступ
- Пользователи и хеширование паролейСущность пользователя, регистрация и хранение пароля в виде хеша с помощью bcrypt.
- Вход по токену JWTКак выдать пользователю токен JWT при входе и проверять его гардом в защищённых маршрутах.
- Роли и права доступаКак разрешить действие только пользователям с нужной ролью: декоратор Roles, Reflector и гард ролей.
- Свои декораторыДекоратор параметра для текущего пользователя через createParamDecorator и объединение декораторов через applyDecorators.
6.Полезные возможности
- Загрузка файловКак принять картинку к статье: FileInterceptor, UploadedFile, проверка размера и типа, раздача загруженных файлов.
- Сериализация ответовКак скрыть пароль и другие поля в ответах API с помощью ClassSerializerInterceptor и декоратора Exclude.
- Документация API: SwaggerКак получить интерактивную документацию API по стандарту OpenAPI с помощью пакета @nestjs/swagger.
- КешированиеКак запоминать ответы и результаты запросов к базе: CacheModule, CacheInterceptor и ручная работа с кешем.
- Задачи по расписаниюКак запускать код по расписанию в NestJS: модуль @nestjs/schedule, декораторы Cron, Interval и Timeout.
- Журнал: встроенный LoggerКак писать сообщения в журнал через класс Logger, выбирать уровни и включать вывод в формате JSON.
7.Тесты и запуск
- Модульные тестыКак проверить сервис отдельно от базы данных: Jest, Test.createTestingModule и подмена репозитория.
- Сквозные тесты с supertestКак проверить API целиком: поднять приложение в тесте, отправить HTTP-запросы через supertest и проверить ответы.
- Запуск на сервереКак собрать проект NestJS, запустить его в рабочем режиме, задать переменные окружения и держать процесс запущенным.