Nestjs 中的管道能够将输入数据转换为所需的输出。此外,它也能够处理证,当数据不正确时可能会抛出异常。javascript
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`;
}
}
复制代码
守卫是一个使用@Injectable()
装饰器的类。 守卫应该实现CanActivate
接口。markdown
守卫有一个单独的责任。它们肯定请求是否应该由路由处理程序处理。到目前为止,访问限制逻辑大多在中间件内。这样很好,由于诸如token
验证或将request
对象附加属性与特定路由没有强关联。但中间件是很是笨的。它不知道调用next()
函数后会执行哪一个处理程序。另外一方面,守卫能够访问ExecutionContext
对象,因此咱们确切知道将要执行什么。cookie
说白了 :在Nextjs
中若是咱们想作权限判断的话能够在守卫中完成,也能够在中间件中完成。session
nest g guard auth
app
守卫建立完成后生成以下代码:函数
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 {}
复制代码
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;
}
}
复制代码
//全局守卫
app.useGlobalGuards(new AuthGuard());
复制代码
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;
}
}
复制代码