15. ValidationPipe

140 阅读3分钟
 视频教程

25_nestjs中对post参数进行验证_哔哩哔哩_bilibili

1. 介绍

在Nest.js中,ValidationPipe 是一个内置的管道,它主要用于对控制器层接收到的HTTP请求参数进行验证。ValidationPipe 结合了 class-validator 库的功能,允许开发人员通过在 DTO(Data Transfer Object)类中使用装饰器来声明性地定义各种验证规则。

我们上节课,讲的都是对get请求的参数验证,那我们的post请求参数应该如何验证?

nest new validation-pipe -p pnpm

2. post参数验证

之前我们讲过, post 请求的数据通过 @Body 装饰器获取,并且要有一个 dto 来接收

nest g res user  --no-spec

修改下CreateUserDto

打印一下参数

我们用apifox发送一个post请求

可以看到,我们传递的参数就被正常的打印出来了,这是正常的情况,那我们来验证下参数有问题的情况

我们期望的age是个整数,这里是个字符串,那么应该报错,对吧。所以这个时候我们就需要对参数进行校验,那么我们要怎么校验?答案是使用ValidationPipe

使用它还需要安装两个其他包

pnpm install class-validator class-transformer

然后我们加上验证

还需要在CreateUserDto里面,用 class-validator 包的 @IsInt 装饰器标记一下

再次发生请求

3. 自定义错误信息

message除了是字符串,还可以是函数

可以拿到对象、属性名、属性值、class 名等信息,我们可以根据这些字段定制错误信息

4. 常用验证

装饰器名称中文意思使用情况
@IsNotEmpty()非空检查给定值是否不为空(!== '', !== null, !== undefined)
@IsString()字符串检查值是否为字符串
@IsNumber()数字检查值是否为数字
@IsBoolean()布尔检查值是否为布尔类型
@IsDate()日期检查值是否为日期对象
@IsArray()数组检查值是否为数组
@IsEnum()枚举检查值是否为枚举类型
@IsInt()整数检查值是否为整数
@IsPositive()正数检查值是否为正数
@IsNegative()负数检查值是否为负数
@Min()最小值检查数值是否大于等于给定数值
@Max()最大值检查数值是否小于等于给定数值
@Length()长度检查字符串长度是否在某个范围内
@MinLength()最小长度检查字符串长度是否不少于给定数字
@MaxLength()最大长度检查字符串长度是否不超过给定数字
@IsEmail()电子邮件检查值是否为电子邮件地址
@IsUrl()URL地址检查值是否为URL地址
@Matches()匹配检查字符串是否匹配指定的正则表达式
@IsBooleanString()布尔字符串检查值是否为布尔字符串(例如 "true" 或 "false" 或 "1", "0")
@IsNumberString()数字字符串检查字符串是否为数字
@IsBase64()Base64字符串检查值是否为Base64字符串
@IsMongoId()MongoDB ObjectId检查字符串是否为MongoDB的ObjectId字符串
@IsPostalCode()邮政编码检查值是否为邮政编码
@IsHexColor()十六进制颜色码检查值是否为十六进制颜色码
@IsAlpha()纯字母检查字符串是否只包含字母 (a-zA-Z)
@IsAlphanumeric()字母数字检查字符串是否只包含字母和数字
@IsAscii()ASCII字符检查字符串是否只包含ASCII字符
@IsFullWidth()全角字符检查字符串是否包含任何全角字符
@IsIn()包含于数组检查值是否在允许值的数组中

官网: github.com/typestack/c…