Nestjs管道、守衛

1、Nestjs管道

一、關於Nestjs中的管道

Nestjs 中的管道能夠將輸入數據轉換爲所需的輸出。此外,它也能夠處理證,當數據不正確時可能會拋出異常。javascript

二、Nestjs中建立和使用管道

一、建立管道

nest g pipe user
複製代碼

管道建立完成後生成以下代碼:java

import { ArgumentMetadata, Injectable, PipeTransform} from '@nestjs/common';
@Injectable()
export class UserPipe implements PipeTransform {
    transform(value: any, metadata: ArgumentMetadata) {
        //這個裏面能夠修改傳入的值以及驗證轉入值的合法性
        return value;
    }
}
複製代碼

二、使用管道

import { Controller,Get,UsePipes,Query} from '@nestjs/common';
import { UserPipe } from '../../user.pipe';
@Controller('user')
export class UserController {
    @Get()
    index(){
        return '用戶頁面';
    }
    @Get('pipe')
    @UsePipes(new UserPipe())
    pipe(@Query() info){
        console.log(info);
        return `this is Pipe`;
    }
}
複製代碼

2、Nestjs守衛

一、 關於Nestjs中的守衛

守衛是一個使用@Injectable()裝飾器的類。 守衛應該實現CanActivate接口。markdown

守衛有一個單獨的責任。它們肯定請求是否應該由路由處理程序處理。到目前爲止,訪問限制邏輯大多在中間件內。這樣很好,由於諸如token驗證或將request對象附加屬性與特定路由沒有強關聯。但中間件是很是笨的。它不知道調用next()函數後會執行哪一個處理程序。另外一方面,守衛能夠訪問ExecutionContext對象,因此咱們確切知道將要執行什麼。cookie

說白了 :在Nextjs中若是咱們想作權限判斷的話能夠在守衛中完成,也能夠在中間件中完成。session

二、Nestjs中建立守衛、以及控制器中單獨配置守衛

一、建立守衛

nest g guard authapp

守衛建立完成後生成以下代碼:函數

import { CanActivate, ExecutionContext, Injectable } from '@nestjs/common';
import { Observable } from 'rxjs';
@Injectable()
export class AuthGuard implements CanActivate {
    canActivate(
        context: ExecutionContext,
        ): boolean | Promise<boolean> | Observable<boolean> {
        return true;
    }
}
複製代碼

二、使用守衛

@Get('guard')
@UseGuards(AuthGuard)
guard(@Query() info){
    console.log(info);
    return`thisis guard`;
}
複製代碼

也能夠直接加在控制器上面oop

@Controller('cats')
@UseGuards(RolesGuard)
export class CatsController {}
複製代碼

三、Nestjs中使用守衛、以及全局配置守衛

一、建立守衛

nest g guard auth
複製代碼

守衛建立完成後生成以下代碼:ui

import { CanActivate, ExecutionContext, Injectable } from '@nestjs/common';
import { Observable } from 'rxjs';
@Injectable()
export class AuthGuard implements CanActivate {
    canActivate(
        context: ExecutionContext,
        ): boolean | Promise<boolean> | Observable<boolean> {
        return true;
    }
}
複製代碼

2 、全局使用守衛

//全局守衛
app.useGlobalGuards(new AuthGuard());
複製代碼

三、在Nestj的守衛中獲取 Cookie 和 和 Session

import { CanActivate, ExecutionContext, Injectable } from '@nestjs/common';
import { Observable } from 'rxjs';
@Injectable()
export class AuthGuard implements CanActivate {
    canActivate(
        context: ExecutionContext,
        ): boolean | Promise<boolean> | Observable<boolean> {
        console.log(context.switchToHttp().getRequest().cookies);
        console.log(context.switchToHttp().getRequest().session);
        return true;
    }
}
複製代碼
相關文章
相關標籤/搜索