Nestjs 学习系列基础篇5 - 利用Pipe通道实现数据校验

346 阅读1分钟

Nestjs 学习系列基础篇5 - 利用Pipe通道实现数据校验

参考资源

1. Validation

2.class-validator

管道Pipe是什么

管道是一个用 @Injectable() 装饰器注释的类。管道应该实现 PipeTransform 接口。

nest5_1.png

主要应用场景

  • 验证: 对输入数据进行验证,验证通过继续传递,否则抛出异常。
  • 转化: 将输入数据转化后输出。

数据校验实战

安装

安装依赖

pnpm i class-validator class-transformer

在项目中使用

  1. src/main.ts中添加管道Pipe

    src/main.ts

    import { NestFactory } from '@nestjs/core';
    import { AppModule } from './app.module';
    import { generateDocument } from './doc';
    import { ValidationPipe } from '@nestjs/common';
    
    async function bootstrap() {
      const app = await NestFactory.create(AppModule);
      // 添加全局管道
      app.useGlobalPipes(new ValidationPipe());
      // 创建 swagger api 文档
      generateDocument(app);
      await app.listen(3000);
    }
    bootstrap();
    
  2. src/user/dto/create-user.dto.ts中使用

    src/user/dto/create-user.dto.ts

    import { ApiProperty } from "@nestjs/swagger";
    import { IsNotEmpty, Matches, Max, Min, Length, IsEmail } from 'class-validator';
    
    export class CreateUserDto {
        @ApiProperty({ example: '18321312321' })
        @Matches(/^1\d{10}$/g, { message: '请输入手机号' })
        phoneNumber: string;
    
        @ApiProperty({ example: '11111' })
        @IsNotEmpty()
        @Length(6, 10)
        password: string;
    
        @ApiProperty({ example: 'aa@qq.com' })
        @IsEmail()
        email: string;
    }
    
  3. 测试:打开Swagger接口文档中进行测试

nest5_2.png

nest5_3.png

项目仓库地址

仓库地址Github: dome-server

注意:基础篇的的代码在 base 分支下