Файл: Разработка клиентсерверных приложений введение в nestjs.pdf
ВУЗ: Не указан
Категория: Не указан
Дисциплина: Не указана
Добавлен: 09.11.2023
Просмотров: 37
Скачиваний: 2
ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.
МИКРОСЕРВИСЫ
NestJS позволяет создавать микросервисы на основе популярных протоколов (HTTP, gRPC, RabbitMQ и другие)
Используется пакет
@nestjs/microservices
Микросервисы могут быть созданы как отдельные приложения или интегрированы в основное приложение
ПРИМЕР СОЗДАНИЯ МИКРОСЕРВИСА НА ОСНОВЕ GRPC
import
{ Controller } from
'@nestjs/common'
;
import
{ GrpcMethod } from
'@nestjs/microservices'
;
import
{ UserService } from
'./user.service'
;
@Controller
()
export class
UserGrpcController
{
constructor
(
private readonly userService: UserService) {}
@GrpcMethod
(
'UserService'
,
'FindAll'
)
async findAll(data: any
):
Promise
<
any
> {
const users = await this
.userService.findAll();
return
{ users };
}
@GrpcMethod
(
'UserService'
,
'FindOne'
)
async findOne(data: any
):
Promise
<
any
> {
const user = await this
.userService.findOne(data.id);
return
{ user };
}
}
РКСП, 2023 23
Пайплайны - компоненты, которые могут преобразовывать, валидировать или модифицировать данные перед передачей в контроллеры или провайдеры
Гарды - компоненты, которые могут контролировать доступ к определенным ресурсам или маршрутам
Декорируются декораторами
@UsePipes и
@UseGuards соответственно
КОНЦЕПЦИИ В NESTJS
ПАЙПЛАЙНЫ И ГАРДЫ
<% code %> <% description %>
РКСП, 2023 24
КОНЦЕПЦИИ В NESTJS
TYPEORM
TypeORM - ORM для TypeScript и JavaScript, поддерживающий множество реляционных СУБД
Предоставляет инструменты для описания моделей данных, создания и обновления схемы БД,
выполнения запросов и транзакципрой
Интегрируется с NestJS через пакет
@nestjs/typeorm
РКСП, 2023 25
КОНЦЕПЦИИ В NESTJS
АВТОРИЗАЦИЯ
Авторизация - процесс проверки подлинности и авторизации пользователей
В NestJS для авторизации используется пакет
@nestjs/passport
Предоставляет механизмы аутентификации с использованием различных стратегий (например, JWT)
Может быть интегрирован с любой системой учетных записей (например, базой данных пользователей)
РКСП, 2023 26
КОНЦЕПЦИИ В NESTJS
ТЕСТИРОВАНИЕ
Тестирование - процесс проверки работоспособности приложения на различных уровнях
В NestJS для тестирования используется пакет
@nestjs/testing
Предоставляет инструменты для запуска тестовых сценариев, создания мок-объектов и проверки результатов
Может быть интегрирован с любой системой тестирования (например, Jest)
РКСП, 2023 27
СОЗДАНИЕ ПРОЕКТА
ПРИМЕР СОЗДАНИЯ ТЕСТОВОГО ПРОЕКТА
1. Установить NestJS CLI: npm i -g @nestjs/cli
2. Создать новый проект: nest new project-name
3. Запустить проект: cd project-name && npm run start:dev
4. Добавить новый модуль: nest generate module module-name
5. Добавить новый контроллер: nest generate controller controller-name
6. Добавить новый провайдер: nest generate provider provider-name
7. Запустить тесты: npm run test
РКСП, 2023 28
ПРИМЕР РЕАЛИЗАЦИИ БАЗОВОЙ
ФУНКЦИОНАЛЬНОСТИ
КОНТРОЛЛЕР
import
{ Controller, Get, Post, Body, Param } from
'@nestjs/common'
;
import
{ UserService } from
'./user.service'
;
import
{ User } from
'./user.entity'
;
@Controller
(
'users'
)
export class
UserController
{
constructor
(
private readonly userService: UserService) {}
@Get
()
findAll():
Promise
return this
.userService.findAll();
}
@Get
(
':id'
)
findOne(
@Param
(
'id'
) id: string
):
Promise
return this
.userService.findOne(id);
}
@Post
()
create(
@Body
() user: User):
Promise
return this
.userService.create(user);
}
}
РКСП, 2023 29
ПРИМЕР РЕАЛИЗАЦИИ БАЗОВОЙ
ФУНКЦИОНАЛЬНОСТИ
СЕРВИС
import
{ Injectable } from
'@nestjs/common'
;
import
{ InjectRepository } from
'@nestjs/typeorm'
;
import
{ Repository } from
'typeorm'
;
import
{ User } from
'./user.entity'
;
@Injectable
()
export class
UserService
{
constructor
(
@InjectRepository
(User)
private readonly userRepository: Repository
) {}
findAll():
Promise
return this
.userRepository.find();
}
findOne(id: string
):
Promise
return this
.userRepository.findOne(id);
}
create(user: User):
Promise
return this
.userRepository.save(user);
}
}
РКСП, 2023 30
МОДУЛЬНОСТЬ
Модули в NestJS - это организационные единицы, которые группируют функциональность приложения по смыслу и отвечают за управление зависимостями,
инжектирование провайдеров и экспорт функциональности для других модулей.
NestJS предлагает организовывать приложение в модули для более логической структуры и удобства масштабирования
Каждый модуль может содержать компоненты
(контроллеры, сервисы, провайдеры) и
экспортировать их для использования в других модулях
Модули можно импортировать в основном приложении через декоратор
@Module import
{ Module } from
'@nestjs/common'
;
import
{ TypeOrmModule } from
'@nestjs/typeorm'
;
import
{ UserController } from
'./user.controller'
;
import
{ UserService } from
'./user.service'
;
import
{ UserRepository } from
'./user.repository'
;
@Module
({
imports: [TypeOrmModule.forFeature([UserRepository])],
controllers: [UserController],
providers: [UserService],
exports: [UserService],
})
export class
UserModule
{}
import
{ Module } from
'@nestjs/common'
;
import
{ TypeOrmModule } from
'@nestjs/typeorm'
;
import
{ UserModule } from
'./user/user.module'
;
import
{ AppController } from
'./app.controller'
;
import
{ AppService } from
'./app.service'
;
@Module
({
imports: [
TypeOrmModule.forRoot(),
UserModule,
],
controllers: [AppController],
providers: [AppService],
})
export class
AppModule
{}
РКСП, 2023 31