Особенности_NestJS_197863_b98adf-256522-cb6a13

Содержание

Слайд 2

Меня хорошо видно && слышно?

Ставьте , если все хорошо
Напишите в чат, если

Меня хорошо видно && слышно? Ставьте , если все хорошо Напишите в
есть проблемы

+

Слайд 3

Проверить, идет ли запись!

Проверить, идет ли запись!

Слайд 4

Активно участвуем
Задаем вопрос в чат или голосом
Off-topic обсуждаем в Slack #канал группы

Активно участвуем Задаем вопрос в чат или голосом Off-topic обсуждаем в Slack
или #general
Вопросы вижу в чате, могу ответить не сразу

Правила вебинара

Слайд 5

Особенности Nest.js

Николай Лапшин

Особенности Nest.js Николай Лапшин

Слайд 6

Маршрут вебинара

Exception filters

Pipes

Рефлексия, ответы на вопросы

Кодинг

Guards

Custom Decorators

Авторизация, аутентификация

Кодинг

Маршрут вебинара Exception filters Pipes Рефлексия, ответы на вопросы Кодинг Guards Custom Decorators Авторизация, аутентификация Кодинг

Слайд 7

Exception filters

Exception filters

Слайд 8

Exception filters

Exception filters

Слайд 9

Exception filters

Nest имеет встроенный уровень исключений, который отвечает за обработку всех необработанных

Exception filters Nest имеет встроенный уровень исключений, который отвечает за обработку всех
исключений в приложении.
Когда исключение не обрабатывается кодом вашего приложения, оно перехватывается этим уровнем.

{
"statusCode": 500,
"message": "Internal server error"
}

Слайд 10

Фильтры по умолчанию

Фильтры по умолчанию

Слайд 11

Exception filters

Exception filters

Слайд 12

Exception filters: Стандартные исключения

@Catch()
export class AllExceptionsFilter implements ExceptionFilter {
    catch(exception: any, host: ArgumentsHost) {
        const ctx = host.switchToHttp();
        const response = ctx.getResponse();
        const request = ctx.getRequest();
        const status =
            exception instanceof HttpException
                ? exception.getStatus()
                : HttpStatus.INTERNAL_SERVER_ERROR;
        response.status(status).json({
            statusCode: status,
            error:exception,
            timestamp: new Date().toISOString(),
            path: request.url,
        });
    }
}

Exception filters: Стандартные исключения @Catch() export class AllExceptionsFilter implements ExceptionFilter { catch(exception:

Слайд 13

Exception filters: Стандартные исключения

Exception filters: Стандартные исключения

Слайд 15

Nest Pipes

Nest Pipes

Слайд 16

Nest Pipes

Nest Pipes

Слайд 17

Nest Pipes

Используются для преобразования аргументов запросов
Также используются для валидации
Срабатываю перед вызовом метода
Аннотируются

Nest Pipes Используются для преобразования аргументов запросов Также используются для валидации Срабатываю
декоратором @Injectable()
Реализуют интерфейс PipeTransform

Слайд 18

Nest Pipes

Pipes - класс, аннотированный с помощью декоратора @Injectable()
Выполняются перед вызовом метода
Реализуют

Nest Pipes Pipes - класс, аннотированный с помощью декоратора @Injectable() Выполняются перед
интерфейс PipeTransform
Pipes имеют два типичных варианта использования:
Преобразование
Валидация

Слайд 19

Nest Pipes

Pipes из коробки:
ValidationPipe
ParseIntPipe
ParseBoolPipe
ParseArrayPipe
ParseUUIDPipe
DefaultValuePipe

@Get(':id')
async findOne(@Param('id', ParseIntPipe) id: number) {
return this.catsService.findOne(id);
}

@Get()
async find(@Query('id',

Nest Pipes Pipes из коробки: ValidationPipe ParseIntPipe ParseBoolPipe ParseArrayPipe ParseUUIDPipe DefaultValuePipe @Get(':id')
ParseArrayPipe) id: string[]) {
return this.catsService.find({ id });
}

Слайд 20

Nest Pipes

Каждый pipe должен реализовывать метод transform
Метод имеет два параметра: входящее значение

Nest Pipes Каждый pipe должен реализовывать метод transform Метод имеет два параметра:
(value) и данные запроса (metadata)

Слайд 23

Guards

Guard - это класс, определяющий, доступен ли запрос для выполнения по условиям
аннотируется

Guards Guard - это класс, определяющий, доступен ли запрос для выполнения по
@Injectable()
должен реализовать интерфейс CanActivate
выполняется после middleware, но перед любым перехватчиком (Interceptor) или Pipe

Слайд 24

Guards: Authorization guard

import { Injectable, CanActivate, ExecutionContext } from '@nestjs/common';
import { Observable

Guards: Authorization guard import { Injectable, CanActivate, ExecutionContext } from '@nestjs/common'; import
} from 'rxjs';
@Injectable()
export class AuthGuard implements CanActivate {
canActivate(
context: ExecutionContext,
): boolean | Promise | Observable {
const request = context.switchToHttp().getRequest();
return validateRequest(request);
}
}

Слайд 25

Interceptors

Interceptors

Слайд 26

Interceptors

Interceptors

Слайд 27

Interceptors

Interceptor (Перехватчик) - это класс, аннотированный с помощью декоратора @Injectable()
Перехватчики должны реализовывать

Interceptors Interceptor (Перехватчик) - это класс, аннотированный с помощью декоратора @Injectable() Перехватчики должны реализовывать интерфейс NestInterceptor.
интерфейс NestInterceptor.

Слайд 28

Interceptors

Interceptor (перехватчик) – класс, аннотированный @Injectable()
Реализует интерфейс NestInterceptor
Позволяют
привязать дополнительную логику до или

Interceptors Interceptor (перехватчик) – класс, аннотированный @Injectable() Реализует интерфейс NestInterceptor Позволяют привязать
после вызова метода
преобразовать результат, возвращаемый функцией
преобразовать исключение, выброшенное из функции
расширить основные функции поведения
полностью переопределить функцию в зависимости от конкретных условий

Слайд 29

Interceptors: Создание перехватчика

Interceptors: Создание перехватчика

Слайд 30

Custom decorators

Custom decorators

Слайд 31

Custom decorators

Что такое декоратор?

Custom decorators Что такое декоратор?

Слайд 32

Custom decorators

Custom decorators

Слайд 33

Custom decorators

Nest использует концепцию декораторов.
Декораторы в JavaScript на текущий момент находятся в

Custom decorators Nest использует концепцию декораторов. Декораторы в JavaScript на текущий момент
Stage 2 (черновик)
Декораторы могут быть определены для класса, метода или свойства.

Слайд 34

Custom decorators

Как мне работать с декораторами в других проектах?
Javascript: Для работы с

Custom decorators Как мне работать с декораторами в других проектах? Javascript: Для
декораторами необходим babel версии ^7.1.0 + плагин @babel/plugin-proposal-decorators
Typescript: В файле tsconfig.json в свойство compilerOptions выставить флаг "experimentalDecorators": true

Слайд 35

Custom decorators

В Nest по умолчанию входит стандартный набор декораторов параметров (из пакета

Custom decorators В Nest по умолчанию входит стандартный набор декораторов параметров (из пакета @nestjs/common)
@nestjs/common)

Слайд 36

Custom decorators: Создание декоратора

Custom decorators: Создание декоратора

Слайд 37

Аутентификация

Аутентификация

Слайд 38

Аутентификация

В чем различие аутентификации против авторизации?

Аутентификация В чем различие аутентификации против авторизации?

Слайд 39

Аутентификация

Аутентификация

Слайд 40

Аутентификация: Passport

Passport - самая популярная библиотека аутентификации node.js, хорошо известная сообществу и

Аутентификация: Passport Passport - самая популярная библиотека аутентификации node.js, хорошо известная сообществу
успешно используемая во многих производственных приложениях.

Слайд 41

Аутентификация: JWT

Аутентификация: JWT

Слайд 42

Аутентификация: Установка Passport

$ npm install --save @nestjs/passport passport passport-local
$ npm install --save-dev

Аутентификация: Установка Passport $ npm install --save @nestjs/passport passport passport-local $ npm
@types/passport-local

Passport предоставляет стратегию, называемую локальным паспортом, которая реализует механизм аутентификации по имени пользователя и паролю

Слайд 43

Итоги - тезисы

Познакомились с основными механизмами работы с запросами в nest.js:
exception

Итоги - тезисы Познакомились с основными механизмами работы с запросами в nest.js:
filters, interceptors

1

Изучили, как преобразовывать параметры запроса при помощи pipes

Рассмотрели на практике как работает авторизация/аутентификаци
в nestjs

2

3

Слайд 44

Список материалов для изучения

Nest Pipes
Class validator
Passport JS
Custom Decorators
Proposal-decorators
Про токены, JSON Web Tokens

Список материалов для изучения Nest Pipes Class validator Passport JS Custom Decorators
(JWT), аутентификацию и авторизацию. Token-Based Authentication
Имя файла: Особенности_NestJS_197863_b98adf-256522-cb6a13.pptx
Количество просмотров: 34
Количество скачиваний: 0