nestjs(第二章)请求的参数校验,dto

文章介绍了在NestJS中,尽管TypeScript提供了类型检查,但为了在运行时确保数据类型安全,还需要使用DTO(DataTransferObject)配合class-validator进行参数校验。DTO能确保JS中的类结构,而class-validator则允许通过装饰器进行详细的类型验证,提供更精确的错误反馈。
摘要由CSDN通过智能技术生成

一些问题

nest集成了ts,我们可以通过ts做数据类型校验,为什么还要用dto?
答:因为ts的类型校验只是在编写代码的时候给开发者看的,再搭配相应的编辑器插件,来进行约束或者类型提示,实际是不会转译到js里;但dto是通过class来约束,js有class这个数据类型,这个是会被转译到js里去的。所以推荐用dot而非ts的interface来声明数据类型

一个朴素的dto

声明
在这里插入图片描述
使用,表示将收到一个UserReqDto类型的body,且将返回一个UserResDto类型的响应数据
在这里插入图片描述
在这里插入图片描述
可见我们在class里还是使用的ts来描述成员类型,之前就说过ts是不会转译到js里的,所以用这种朴素的dto校验只能校验数据中是否包含和class中的成员同名的属性(若收到{ id: 123, pwd: 456 },明明收到的是number类型也不会告知类型错误,它只能保证有id和pwd两个属性)。所以我们还需要一种更好的校验方式,如后:

class-validator

安装
$ npm i --save class-validator class-transformer
使用

第一步:在main.ts中注册ValidationPipe校验管道
在这里插入图片描述

第2步:在.dto.ts中使用class-validator中的装饰器来校验类型,装饰器名字还是比较易懂,故不赘述
在这里插入图片描述
这样如果传入的·类型不对,也能被检验出来并报错,似如下参数,pwd应该是string但传了个number,便报错如右:(错在哪一目了然)
在这里插入图片描述

结语

如上便是参数类型校验的一些基操,还有更多细腻操作以后再记录,如有谬误之处还请斧正。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
NestJS 中,可以使用 class-validator 库进行请求参数校验。下面是一个简单的示例代码: 1. 首先,您需要安装 class-validator 和 class-transformer 库: ``` npm install class-validator class-transformer ``` 2. 在您的 DTO(Data Transfer Object)类中定义请求参数的验证规则。例如,假设您有一个 UserDto 类来处理用户注册请求: ```typescript import { IsNotEmpty, IsEmail } from 'class-validator'; export class UserDto { @IsNotEmpty() username: string; @IsNotEmpty() @IsEmail() email: string; @IsNotEmpty() password: string; } ``` 3. 在您的控制器中使用这个 DTO 类,并使用 @Body() 装饰器将请求体绑定到 DTO 对象: ```typescript import { Controller, Post, Body } from '@nestjs/common'; import { UserDto } from './user.dto'; @Controller('users') export class UserController { @Post() createUser(@Body() userDto: UserDto) { // 这里的 userDto 将自动根据定义的验证规则进行校验 // 如果校验失败,NestJS 会抛出 BadRequestException 异常 // 您可以在这里处理校验失败的逻辑 // 如果校验通过,可以继续处理用户注册逻辑 // ... } } ``` 在上述示例中,我们使用了 IsNotEmpty 和 IsEmail 等验证装饰器来定义验证规则。您可以根据需要使用其他 class-validator 提供的装饰器来定义更复杂的验证规则。 请注意,NestJS 默认情况下会使用 class-transformer 库对请求体进行转换。这意味着,如果您在请求体中接收的是 JSON 字符串,NestJS 会自动将其转换为 DTO 对象。如果您不想使用这种转换,请在 main.ts 文件中禁用它: ```typescript import { NestFactory } from '@nestjs/core'; import { AppModule } from './app.module'; async function bootstrap() { const app = await NestFactory.create(AppModule, { bodyParser: false }); await app.listen(3000); } bootstrap(); ``` 以上就是在 NestJS 中进行请求参数校验的基本方法。您可以根据具体的需求进一步扩展和定制验证规则。希望能对您有所帮助!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值