15. ValidationPipe

 视频教程

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()

包含于数组

检查值是否在允许值的数组中

官网: https://github.com/typestack/class-validator#usage

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值