nest学习3:管道 - 守卫 - 拦截器 - 过滤器 - 中间件 - 装饰器

文章问题导向

如何使用管道?
如何使用守卫?
如何使用拦截器?
如何使用过滤器?
如何使用中间件?

如果你都有了答案,可以忽略本文章,或去nest学习导图寻找更多答案


分别作用

管道:数据处理与转换,数据验证
守卫:验证用户登陆,保护路由
拦截器:对请求响应进行拦截,统一响应内容
过滤器:异常捕获
中间件:日志打印
装饰器:获取数据,实现守卫
更多使用方式,请了解执行时机再选用适用的方式

执行顺序(时机)

点击参考该文章


使用(注册)方式

两种使用方式:局部,全局
两种使用类型:内置,自定义


全局使用: 管道 - 守卫 - 拦截器 - 过滤器 - 中间件

统一在main.ts文件中使用,全局生效

import {
    NestFactory } from '@nestjs/core';
import {
    ParseIntPipe } from '@nestjs/common';
import {
    AppModule } from './app.module';

import {
    HttpExceptionFilter } from './common/filters/http-exception.filter';
import {
    LoggerMiddleware } from './common/middleware/logger.middleware';
import {
    AuthGuard } from './common/guard/auth.guard';
import {
    AuthInterceptor } from './common/interceptors/auth.interceptor';


async function bootstrap() {
   
  const app = await NestFactory.create(AppModule);

  //全局使用管道:这里使用的是内置,也可以使用自定义管道,在下文
  app.useGlobalPipes(new ParseIntPipe());

  //全局使用中间件
  app.use(LoggerMiddleware)
  
  //全局使用过滤器
  //这里使用的是自定义过滤器,先别管,先学会怎么在全局使用
  app.useGlobalFilters(new HttpExceptionFilter());  

  //全局使用守卫
  app.useGlobalGuards(new AuthGuard());
  
  //全局使用拦截器
  app.useGlobalInterceptors(new AuthInterceptor());
  
  await app.listen(3000);
}
bootstrap();

管道

内置管道

常用内置管道,从@nestjs/common导出

ParseIntPipe:将字符串数字转数字
ValidationPipe:验证管道
更多待更新

局部使用管道

局部有三种使用方式

  1. 匹配整个路径,使用UseFilters
  2. 只匹配某个接口,使用UseFilters
  3. 在获取参数时匹配,一般使用内置管道

例子

import {
   
  Controller,
  Get,
  Put,
  Body,
  Param,
  UsePipes,
  ParseIntPipe
} from '@nestjs/common';
import {
    myPipe } from '../../common/pipes/user.pipe';

@Controller('user')
@UsePipes(new myPipe())  //局部方式1:匹配整个/user, get请求和put请求都会命中
export class UserController {
   
  @Get(':id')
  getUserById(@Param('id', new ParseIntPipe()) id) {
    //局部方式3:只匹配/user的get请求,使用的是内置管道
    console.log('user', typeof id);
    return id;
  }

  @Put(':id')
  @UsePipes(new myPipe())  //局部方式2:只匹配/user的put请求
  updateUser(@Body() user
  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值