Logo
Section 1 / 8

验证概述

探索 NestJS 中的数据验证,以确保应用程序的安全性和可靠性。

导入

验证概述

探索 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}

NestJS 基础知识

使用管道验证请求