主题
管道和验证
管道和验证配合使用,可以验证传入数据的合法性。
管道
管道接收指定给该方法(请求)的参数并对它们进行操作。
管道有两个典型的用例
- 转型:将输入数据转换为所需的形式(例如,从字符串到整数)
- 验证:评估输入数据,如果有效,只需将其原样传递;否则抛出异常
使用方法
管道的相关方法是从 @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);
}如果参数错误,则会抛出错误。

