Nest.js框架(3)

管道

 
管道是具有 @Injectable() 装饰器的类。管道应实现 PipeTransform 接口。
 
管道的作用:
 
转换:管道将输入数据转换为所需的数据输出
 
验证:对输入数据进行验证,如果验证成功继续传递 ; 验证失败则抛出异常 ;
 
在这个作用下 , 管道 参数 (arguments) 会由 控制器 (controllers) 的路由处理程序 进行处理 . Nest 会在调用这个方法之前插入一
个管道,管道会先拦截方法的调用参数 , 进行转换或是验证处理,然后用转换好或是验证好的参数调用原方法。
 
 

内置管道

Nest 自带六个开箱即用的管道,即
 
ValidationPipe
 
ParseIntPipe
 
ParseBoolPipe
 
ParseArrayPipe
 
ParseUUIDPipe
 
DefaultValuePipe
 
 
 
 
每个管道必须提供 transform() 方法。 这个方法有两个参数:
 
value
 
metadata

value 是当前处理的参数,而 metadata 是其元数据。元数据对象包含一些属性,元数据对象包含一些属性:
 
type 告诉我们该属性是一个 body @Body() query @Query() param @Param() 还是自定义参数
 
metatype 属性的元类型,例如 String
 
data
传递给装饰器的字符串,例如 @Body('string') 。 如果您将括号留空,则为 undefined
 

对象结构验证

例如:我们在做添加的时候,需要验证实体类的属性,我们可以在路由方法中做到这一点,但是这回打破职责
单一原则( SPR ),另一个就是借助中间件进行处理,但是,我们不可能创建一个整个应用通用的中间件,因为
中间件不知道执行的环境,以及被调用的函数和他的参数,这种情况下就可以考虑管道
 
Joi 库是允许您使用一个可读的 API 以非常简单的方式创建 schema (实体类)
 
安装依赖:
 
npm install --save @hapi/joi
 
$ npm install --save-dev @types/hapi__joi

 

对象结构验证

我们需要在管道类中的构造函数中注入实体类,但前提是你以及创建好实体类
 
验证管道 要么返回该值,要么抛出一个错误
 

绑定管道

绑定管道(可以绑在 controller 或是其方法上)非常简单。我们使用 @UsePipes() 装饰器并创建一个管道实例,
并将其传递给 Joi 验证。
 

类验证器(JavaScript不可用)

Nest class-validator 的兼容性很好,允许基于
装饰器的验证,安装依赖:
 
npm i --save class-validator class-transformer
 
在实体类中添加装饰器即可
 
https://github.com/typestack/class-validator#usage
查看更多类验证器修饰符的更多信息。
 

创建管道类

绑定管道类

管道,与异常过滤器相同,它们可以是方法范围的、控制器范围的和全局范围的。另外,管道可以是参数范围的。
我们可以直接将管道实例绑定到路由参数装饰器,例如 @Body()
 
当验证逻辑仅涉及一个指定的参数时,参数范围的管道非常有用。要在方法级别设置管道,您需要使用 UsePipes()
饰器。
 
当然最高效的方式直接传入类(依赖注入)
 

全局作用域管道

由于 ValidationPipe 被创建为尽可能通用,所以我们将把它设置为一个全局作用域的管道,用于整个应用程序中的每
个路由处理器。
 
 
 
全局管道用于整个应用程序、每个控制器和每个路由处理程序。就依赖注入而言,从任何模块外部注册的全局管道
(如上例所示)无法注入依赖,因为它们不属于任何模块。为了解决这个问题,可以使用以下构造直接为任何模块
设置管道:
 

转换管道

验证不是管道唯一的用处。管道也可以将输入数据转换为所需的数据,因为从 transform 函数返回的值完全覆盖了参
数先前的值,有什么作用呢?
 
字符串转化为整数
 
密码加密 ...
 
转换管道 被插入在客户端请求和请求处理程序之间用来处理客户端请求。
 
如下所示 , 我们可以很简单的配置管道来处理所参数 id:
 
 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值