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;
}
}
複製代碼