返回
使用class-validator和类验证器轻松实现表单验证!
前端
2023-09-12 01:42:07
在NestJS中,表单验证是至关重要的,它能确保我们的后端服务接收到的数据是有效的和安全的。在本文中,我们将探讨如何使用class-validator 库和类验证器来实现表单验证。
前言
在上一篇文章中,我们使用拦截器和异常过滤器实现了请求返回的格式化,并在getOne 方法中添加了错误响应。这一节,我们将深入探讨表单验证,这对于确保我们的后端服务接收的数据是有效的和安全的至关重要。
什么是表单验证?
表单验证是一种确保从用户收集的数据符合特定规则和约束的过程。在NestJS中,我们可以使用class-validator 库来轻松实现表单验证。
安装class-validator
要安装class-validator ,请在终端中运行以下命令:
npm install class-validator --save
使用类验证器
类验证器允许我们定义数据模型并使用装饰器对属性进行验证。例如,我们可以创建以下数据模型:
import { IsNotEmpty, IsEmail } from 'class-validator';
export class CreateUserDto {
@IsNotEmpty()
name: string;
@IsNotEmpty()
@IsEmail()
email: string;
}
在此模型中,name 属性需要非空,而email 属性需要是一个有效的电子邮件地址。
在控制器中使用类验证器
现在我们已经定义了数据模型,可以在控制器中使用类验证器来验证传入的数据。例如:
import { Body, Controller, Post } from '@nestjs/common';
import { CreateUserDto } from './create-user.dto';
@Controller('users')
export class UsersController {
@Post()
async create(@Body() createUserDto: CreateUserDto) {
// 对 createUserDto 进行验证
const errors = validate(createUserDto);
if (errors.length > 0) {
throw new BadRequestException(errors);
}
// 处理创建用户逻辑
}
}
自定义验证规则
除了内置的验证器之外,我们还可以创建自己的自定义验证规则。例如,我们可以创建一个IsUnique 验证器来检查电子邮件地址是否在数据库中唯一:
import { Injectable, ValidationArguments } from '@nestjs/common';
import { ValidatorConstraint, ValidatorConstraintInterface } from 'class-validator';
@Injectable()
@ValidatorConstraint({ name: 'isUnique', async: true })
export class IsUniqueValidator implements ValidatorConstraintInterface {
async validate(value: string, args: ValidationArguments) {
// 检查电子邮件地址是否在数据库中唯一
const isUnique = await this.userService.isUniqueEmail(value);
return isUnique;
}
}
然后,我们可以使用自定义验证器来验证email 属性:
import { IsUnique } from './is-unique.validator';
export class CreateUserDto {
@IsNotEmpty()
name: string;
@IsNotEmpty()
@IsEmail()
@IsUnique()
email: string;
}
结论
使用class-validator 和类验证器,我们可以轻松地在NestJS应用程序中实现表单验证。这有助于确保我们接收到的数据是有效的和安全的,从而提升应用程序的健壮性和用户体验。