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;
    }
}
复制代码
相关文章
相关标签/搜索