乐闻世界logo
搜索文章和话题

NestJS 如何校验参数是必需的?

8 个月前提问
6 个月前修改
浏览次数57

1个答案

1

在NestJS中,参数校验通常是通过使用类验证器(Class-validator)库进行的。这个库提供了很多装饰器来定义数据的校验规则。为了使一个参数成为必需的,可以使用@IsNotEmpty装饰器。

下面是一个如何使用@IsNotEmpty装饰器来校验必需参数的例子。首先,确保安装了class-validatorclass-transformer包。

bash
npm install class-validator class-transformer

然后,在你的DTO(Data Transfer Object)中定义参数时使用装饰器:

typescript
import { IsNotEmpty } from 'class-validator'; export class CreateUserDto { @IsNotEmpty() username: string; @IsNotEmpty() password: string; }

在这个例子中,CreateUserDto类用来传递创建新用户所需的数据。usernamepassword都被装饰了@IsNotEmpty,这表示在处理请求时,这些字段不能是空的。

现在,让我们来看一个具体的控制器方法,它使用了CreateUserDto来接收数据:

typescript
import { 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,它会自动应用类验证器中定义的校验规则。

typescript
import { 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,当客户端发送一个包含空usernamepassword的请求时,NestJS会抛出一个BadRequestException,并返回一个包含哪些字段不满足校验条件的响应。这个过程确保了只有验证通过的数据才会被控制器处理。

2024年6月29日 12:07 回复

你的答案