class-validator 简介
\n\nclass-validator 是一个基于装饰器构建的、用于 TypeScript 和 JavaScript 中数据验证的强大且流行的库。它允许你使用注解在类内部声明式地描述验证规则。这使得代码清晰、可读且易于维护。
\n\n该库在开发服务器端应用程序(例如基于 NestJS 或 Express)时特别有用,因为在这些应用中需要验证传入的请求、表单数据、配置以及任何其他数据结构。无需编写冗长的 if-else 链,你只需向类的属性添加装饰器即可。
\n\n为什么需要 class-validator?
\n\n- \n
- 声明式: 验证规则定义在数据旁边,提高了可读性。 \n
- 强大的验证器集合: 包含数十个内置装饰器,用于验证字符串、数字、日期、数组、嵌套对象等。 \n
- 自定义验证器: 允许轻松创建你自己的规则。 \n
- 与 TypeScript 集成: 完全支持类型和装饰器。 \n
- 异步验证: 支持需要异步操作的检查(例如,检查数据库中的唯一性)。 \n
安装
\n\n要使用 class-validator,你需要 Node.js 和 npm/yarn。安装该库及其必要的依赖项:
\n\nnpm install class-validator class-transformer reflect-metadata\n\n或者通过 yarn:
\n\nyarn add class-validator class-transformer reflect-metadata\n\n重要: reflect-metadata 库是装饰器工作的必要条件。确保在你的主文件(例如 index.ts 或 main.ts)中导入它:
import 'reflect-metadata';\n\n同时,确保你的 tsconfig.json 中包含以下设置:
{\n "compilerOptions": {\n "experimentalDecorators": true,\n "emitDecoratorMetadata": true\n }\n}\n\n快速入门
\n\n让我们创建一个简单的用户模型并对其进行验证。
\n\nimport 'reflect-metadata';\nimport { validate, IsString, IsEmail, MinLength } from 'class-validator';\nimport { plainToClass } from 'class-transformer';\n\nclass User {\n @IsString()\n @MinLength(3, { message: '名字必须至少包含3个字符' })\n name: string;\n\n @IsEmail({}, { message: '无效的电子邮件地址' })\n email: string;\n\n constructor(name: string, email: string) {\n this.name = name;\n this.email = email;\n }\n}\n\nasync function main() {\n // 创建一个包含无效数据的对象\n const userData = { name: 'Jo', email: 'not-an-email' };\n \n // 将普通对象转换为类的实例\n const user = plainToClass(User, userData);\n \n // 进行验证\n const errors = await validate(user);\n \n if (errors.length > 0) {\n console.log('验证错误:', errors);\n errors.forEach(error => {\n console.log(`字段: ${error.property}`);\n for (const constraint in error.constraints) {\n console.log(` - ${error.constraints[constraint]}`);\n }\n });\n } else {\n console.log('验证成功!');\n }\n}\n\nmain();\n// 输出:\n// 验证错误: [...]\n// 字段: name\n// - 名字必须至少包含3个字符\n// 字段: email\n// - 无效的电子邮件地址\n\n主要方法和装饰器
\n\n1. @IsString()
\n功能: 检查值是否为字符串。
\n参数: 接受一个可选的验证选项对象(例如 { message: '...' })。