2025年06月13日/ 浏览 4
装饰器中加入正则表达式,可以很方便地实现复杂的验证逻辑。以下是如何在NestJS中通过正则表达式来设置验证规则的步骤,以及一个简单的例子来展示如何统一验证“标题”、“关键词”、“描述”和“正文”的输入。
首先,确保你已经安装了class-validator
和class-transformer
。如果没有安装,可以通过以下命令进行安装:
bash
npm install class-validator class-transformer
在需要使用验证的模块或服务中导入这些库:
typescript
import { IsString, MinLength, MaxLength } from 'class-validator';
你可以创建一个DTO来定义你的输入数据的结构,并使用@Is...
装饰器来应用正则表达式验证。以下是一个示例,用于验证“标题”、“关键词”、“描述”和“正文”的输入:
“`typescript
import { IsString, MinLength, MaxLength } from ‘class-validator’;
export class ContentDto {
@IsString({ message: ‘标题必须为字符串’ })
@MinLength(3, { message: ‘标题至少需要3个字符’ })
@MaxLength(100, { message: ‘标题不能超过100个字符’ })
title: string;
@IsString({ message: ‘关键词必须为字符串’ })
@MinLength(1, { message: ‘关键词至少需要1个字符’ })
@MaxLength(500, { message: ‘关键词不能超过500个字符’ })
keywords: string;
@IsString({ message: ‘描述必须为字符串’ })
@MinLength(10, { message: ‘描述至少需要10个字符’ })
@MaxLength(5000, { message: ‘描述不能超过5000个字符’ })
description: string;
@IsString({ message: ‘正文必须为字符串’ })
content: string; // 假设这里不需要额外的长度限制,但可以根据实际需求添加
}
“`
在你的控制器或服务中,你可以使用DTO来进行验证。例如,在控制器中创建一个接收ContentDto
的路由,并使用class-validator
的管道来自动执行验证:
“`typescript
import { Controller, Post, UsePipes, ValidationPipe } from ‘@nestjs/common’;
import { ContentDto } from ‘./content.dto’; // 假设这是你的DTO路径
import { CreateContentService } from ‘./create-content.service’; // 假设这是你的服务路径,用于处理创建内容的逻辑
@Controller(‘contents’)
export class ContentController {
constructor(private readonly createContentService: CreateContentService) {}
@Post()
@UsePipes(ValidationPipe) // 使用ValidationPipe自动进行验证
createContent(@Body() contentDto: ContentDto) { // 接收DTO作为参数并自动验证它
return this.createContentService.create(contentDto); // 调用服务来处理创建内容的逻辑… 省略具体实现细节…
}
}
“`
确保在你的测试环境中对API进行测试,以验证正则表达式的正确性和API的健壮性。使用Postman或任何其他API测试工具进行测试是个好方法。确保所有的输入都符合你的预期规则,同时观察并处理可能出现的错误消息。