用Nest Validator轻松对请求参数进行校验
2023-11-21 17:59:42
在 Nest.js 中,我们可以使用 @nestjs/class-validator
包来对请求参数进行校验。
- 安装
@nestjs/class-validator
包
npm i @nestjs/class-validator
- 在模块中导入
ValidationModule
import { ValidationModule } from '@nestjs/class-validator';
@Module({
imports: [ValidationModule],
})
export class AppModule {}
- 使用
@nestjs/class-validator
包中的装饰器
我们可以在数据传输对象 (DTO) 中使用 @nestjs/class-validator
包中的装饰器来定义请求参数的校验规则。
例如,我们有一个名为 CreateUserDto
的 DTO,它包含以下属性:
export class CreateUserDto {
@IsNotEmpty()
username: string;
@IsEmail()
email: string;
@MinLength(6)
password: string;
}
在这个 DTO 中,我们使用了 @IsNotEmpty()
, @IsEmail()
和 @MinLength(6)
这三个装饰器来对请求参数进行校验。
@IsNotEmpty()
装饰器确保username
属性不是空的。@IsEmail()
装饰器确保email
属性是一个有效的电子邮件地址。@MinLength(6)
装饰器确保password
属性的长度不小于 6。
- 在控制器中使用
@UsePipes()
装饰器
在控制器中,我们可以使用 @UsePipes()
装饰器来告诉 Nest.js 在处理请求之前使用管道来对请求参数进行校验。
import { Controller, UsePipes, ValidationPipe } from '@nestjs/common';
@Controller('users')
export class UsersController {
@Post()
@UsePipes(ValidationPipe)
create(@Body() createUserDto: CreateUserDto) {
// ...
}
}
在上面的代码中,我们使用了 @UsePipes()
装饰器并传递了 ValidationPipe
类作为参数。这告诉 Nest.js 在处理 create()
方法的请求之前,使用 ValidationPipe
来对请求参数进行校验。
如果请求参数不符合校验规则,ValidationPipe
会抛出一个错误。这个错误会被 Nest.js 捕获并返回给客户端。
- 自定义错误消息
我们可以自定义 ValidationPipe
的错误消息。
import { Controller, UsePipes, ValidationPipe } from '@nestjs/common';
@Controller('users')
export class UsersController {
@Post()
@UsePipes(new ValidationPipe({
errorHttpStatusCode: 400,
forbidUnknownValues: true,
exceptionFactory: (validationErrors: ValidationError[]) => {
return new HttpException({
message: 'Validation failed',
errors: validationErrors,
}, 400);
},
}))
create(@Body() createUserDto: CreateUserDto) {
// ...
}
}
在上面的代码中,我们自定义了 ValidationPipe
的错误消息。
errorHttpStatusCode
属性指定了错误的 HTTP 状态码。forbidUnknownValues
属性指定了是否禁止未知的值。exceptionFactory
属性指定了如何生成错误异常。
- 管道和拦截器
管道和拦截器都是 Nest.js 中用于处理请求和响应的中间件。
管道在请求处理之前执行,而拦截器在请求处理之后执行。
我们可以使用管道来对请求参数进行校验,也可以使用拦截器来捕获错误并返回给客户端。
通常情况下,我们会使用管道来对请求参数进行校验,然后使用拦截器来捕获错误并返回给客户端。
- 总结
Nest Validator 是 Nest.js 中用于对请求参数进行校验的工具。它可以帮助我们轻松地定义和验证请求参数,从而确保传入的数据是合法的。
我们在本文中介绍了如何使用 Nest Validator 来对请求参数进行校验,以及如何自定义错误消息。
希望这篇文章对您有所帮助。