在NestJS中,参数校验通常是通过使用类验证器(Class-validator)库进行的。这个库提供了很多装饰器来定义数据的校验规则。为了使一个参数成为必需的,可以使用@IsNotEmpty
装饰器。
下面是一个如何使用@IsNotEmpty
装饰器来校验必需参数的例子。首先,确保安装了class-validator
和class-transformer
包。
bashnpm install class-validator class-transformer
然后,在你的DTO(Data Transfer Object)中定义参数时使用装饰器:
typescriptimport { IsNotEmpty } from 'class-validator'; export class CreateUserDto { @IsNotEmpty() username: string; @IsNotEmpty() password: string; }
在这个例子中,CreateUserDto
类用来传递创建新用户所需的数据。username
和password
都被装饰了@IsNotEmpty
,这表示在处理请求时,这些字段不能是空的。
现在,让我们来看一个具体的控制器方法,它使用了CreateUserDto
来接收数据:
typescriptimport { Body, Controller, Post } from '@nestjs/common'; import { CreateUserDto } from './create-user.dto'; @Controller('users') export class UsersController { @Post() async create(@Body() createUserDto: CreateUserDto) { // 这里是你的业务逻辑,例如保存用户信息到数据库 } }
为了让参数校验生效,你需要在main.ts
文件(或你的应用入口文件)中启用全局的管道。NestJS提供了一个内置的ValidationPipe
,它会自动应用类验证器中定义的校验规则。
typescriptimport { NestFactory } from '@nestjs/core'; import { AppModule } from './app.module'; import { ValidationPipe } from '@nestjs/common'; async function bootstrap() { const app = await NestFactory.create(AppModule); app.useGlobalPipes(new ValidationPipe()); await app.listen(3000); } bootstrap();
使用ValidationPipe
,当客户端发送一个包含空username
或password
的请求时,NestJS会抛出一个BadRequestException
,并返回一个包含哪些字段不满足校验条件的响应。这个过程确保了只有验证通过的数据才会被控制器处理。
2024年6月29日 12:07 回复