Skip to content

管道和验证

管道和验证配合使用,可以验证传入数据的合法性。

管道

管道接收指定给该方法(请求)的参数并对它们进行操作。

管道有两个典型的用例

  • 转型:将输入数据转换为所需的形式(例如,从字符串到整数)
  • 验证:评估输入数据,如果有效,只需将其原样传递;否则抛出异常

使用方法

管道的相关方法是从 @nestjs/common 包中导出的。

user.controller.ts

ts
@Get(':id')
async findOne(@Param('id', ParseIntPipe) id: number) {
  return this.userService.findOne(id);
}

如果参数不是数字,则会抛出错误。

在 main.ts 中全局开启,配合验证,不然验证无效。

ts
import { ValidationPipe } from '@nestjs/common';
app.useGlobalPipes(new ValidationPipe());

验证

验证请求的传参是否符合规则,错误的参数会返回错误信息。

管道自带一些验证方法,这里使用更加高级的定制功能。

准备工作

安装依赖包

shell
npm i --save class-validator class-transformer

在 main.ts 中全局开启,配合验证,不然验证无效。

ts
import { ValidationPipe } from '@nestjs/common';
app.useGlobalPipes(new ValidationPipe());

使用方法

在create-user.dto.ts中定义验证规则。

ts
import { IsEmail, IsNotEmpty } from 'class-validator';
export class CreateUserDto {
  @IsEmail()
  email: string;

  @IsNotEmpty()
  password: string;
}

在user.controller.ts中使用验证。

ts
@Post()
create(@Body() createUserDto: CreateUserDto) {
  return this.userService.create(createUserDto);
}

如果参数错误,则会抛出错误。