Nest框架(二)

管道

管道是具有 @Injectable() 装饰器的类。管道应实现 PipeTransform 接口。

管道的作用:

转换:管道将输入数据转换为所需的数据输出

验证:对输入数据进行验证,如果验证成功继续传递; 验证失败则抛出异常;

在这个作用下, 管道 参数(arguments) 会由 控制器(controllers)的路由处理程序 进行处理. Nest 会在调用这个方法之前插入一个管道,管道会先拦截方法的调用参数,进行转换或是验证处理,然后用转换好或是验证好的参数调用原方法。
在这里插入图片描述
内置管道

Nest 自带六个开箱即用的管道,即

ValidationPipe

ParseIntPipe

ParseBoolPipe

ParseArrayPipe

ParseUUIDPipe

DefaultValuePipe

每个管道必须提供 transform() 方法。 这个方法有两个参数:

value

metadata

import { PipeTransform, Injecttable, ArgumentMetadata } from '@nestjs/common';

@Injecttable()
export class ValidationPipe implements PipeTransform{
  transform(value: any, metadata: ArgumentMetadata ) {
    return value;
  }
}

value 是当前处理的参数,而 metadata 是其元数据。元数据对象包含一些属性,元数据对象包含一些属性:

       type 告诉我们该属性是一个 body @Body(),query @Query(),param @Param() 还是自定义参数

       metatype 属性的元类型,例如 String。

       data 传递给装饰器的字符串,例如 @Body(‘string’)。 如果您将括号留空,则为 undefined。

export interface ArgumentMetadata {
  type: 'body' | 'query' | 'param' | 'custom';
  metatype?: Type<unknown>;
  data?: string;
}

对象结构验证

例如:我们在做添加的时候,需要验证实体类的属性,我们可以在路由方法中做到这一点,但是这回打破职责单一原则(SPR),另一个就是借助中间件进行处理,但是,我们不可能创建一个整个应用通用的中间件,因为中间件不知道执行的环境,

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值