前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >nestjs中如何使用class-validator和class-transformer

nestjs中如何使用class-validator和class-transformer

原创
作者头像
挥刀北上
发布2024-04-22 10:32:28
3690
发布2024-04-22 10:32:28
举报
文章被收录于专栏:Node.js开发Node.js开发

前面两篇文章分别介绍了class-validatorclass-transformer的使用,接着聊一下如何在nestjs中使用这两个包。

Nest.js自带数据验证,自带了三个开箱即用的管道:ValidationPipe、ParseIntPipe和ParseUUIDPipe, 其中ValidationPipe 配合class-validator就可以完美的实现我们想要的效果(对参数类型进行验证,验证失败抛出异常)。

管道验证操作通常用在dto这种传输层的文件中,用作验证操作。首先我们安装两个需要的依赖包:class-transformer和class-validator。

代码语言:bash
复制
npm install class-validator class-transformer -S

然后在xxxx.dto.ts文件中添加验证, 完善错误信息提示:

代码语言:ts
复制
import { IsNotEmpty, IsNumber, IsString } from 'class-validator';

export class CreatePostDto {
  @ApiProperty({ description: '文章标题' })
  @IsNotEmpty({ message: '文章标题必填' })
  readonly title: string;

  @IsNotEmpty({ message: '缺少作者信息' })
  @ApiProperty({ description: '作者' })
  readonly author: string;

  @ApiPropertyOptional({ description: '内容' })
  readonly content: string;

  @ApiPropertyOptional({ description: '文章封面' })
  readonly cover_url: string;

  @IsNumber()
  @ApiProperty({ description: '文章类型' })
  readonly type: number;
}

在路由中配置DTO对象:

代码语言:ts
复制

@controller()
class etesxcontroller{
    @post()
     hello(@body(new testpipe()) post:CreatePostDto){}
     
     //testpipe 入参value就是dto可以修改dto的value
     
}

最后我们还有一个重要的步骤, 就是在main.ts中全局注册一下管道ValidationPipe:

代码语言:ts
复制
app.useGlobalPipes(new ValidationPipe());

ValidationPipe的处理步骤 :

  1. 先将传进来普通对象通过 class-transformer 包的 plainToClass 函数转化成 dto 类的实例.
  2. 将得到的这个 dto 实例通过 class-validator 包的 validate 函数进行验证,validate 函数同时会对 dto 实例进行相应处理(比如,设置了 whitelist, 会删除没有被 class-Validator 装饰器装饰的属性)
  3. 将这个 dto 实例再次通过 class-transformer 包的 classToPlain 函数将 dto 实例转化成普通对象
  4. controller 方法收到相应参数

当然了,这是nestjs借助了ValidationPipe使用class-validator和calss-transformer,我们也可以自定义pipe来使用这两个包。

以上便是nestjs中如何使用class-validator和class-transformer,希望对你有所帮助。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档