导入
验证概述
探索 NestJS 中的数据验证,以确保应用程序的安全性和可靠性。
-
类型与格式:确保输入数据符合预期的类型和格式,例如验证电子邮件地址和数值。
-
必填字段:检查所有必填字段是否均已提供,防止数据不完整或错误。
-
大小与长度:验证数据的大小或长度,确保其在可接受范围内,以维护数据库完整性和系统性能。
-
数据净化:移除输入数据中可能具有恶意性质的字符或脚本,防止注入攻击。
-
满足业务规则:应用业务逻辑校验,确保输入数据符合应用程序的具体业务规则。
...
管道与路由处理器
ValidationPipe 可以对输入数据应用验证规则。这些规则通过在类或 DTO 声明中使用装饰器来定义。
其他管道(如 ParseIntPipe)也可用于验证目的。例如,ParseIntPipe 可自动将路由参数转换为整数。如果参数不是有效的整数,则会抛出错误,从而实现参数类型的验证。
1import { IsString, IsEmail, IsNotEmpty } from 'class-validator'; 2 3class UserDto { 4 @IsString() 5 @IsNotEmpty() 6 name: string; 7 8 @IsEmail() 9 email: string; 10}
1import { IsInt, Length, IsIn } from 'class-validator'; 2 3class UserDto { 4 @IsInt() 5 userId: number; 6 7 @Length(2, 20) 8 username: string; 9 10 @IsIn(['admin', 'user']) 11 role: string; 12}
1import { Matches } from 'class-validator'; 2 3class UserDto { 4 @Matches(/^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)[a-zA-Z\d]{8,}$/, { 5 message: '密码必须至少8位,且包含至少一个大写字母、一个小写字母和一个数字。' 6 }) 7 password: string; 8}
1import { IsInt } from 'class-validator'; 2 3class UserDto { 4 @IsInt({ message: '用户ID必须为整数。' }) 5 userId: number; 6}