返回

用Nest Validator轻松对请求参数进行校验

后端

在 Nest.js 中,我们可以使用 @nestjs/class-validator 包来对请求参数进行校验。

  1. 安装 @nestjs/class-validator
npm i @nestjs/class-validator
  1. 在模块中导入 ValidationModule
import { ValidationModule } from '@nestjs/class-validator';

@Module({
  imports: [ValidationModule],
})
export class AppModule {}
  1. 使用 @nestjs/class-validator 包中的装饰器

我们可以在数据传输对象 (DTO) 中使用 @nestjs/class-validator 包中的装饰器来定义请求参数的校验规则。

例如,我们有一个名为 CreateUserDto 的 DTO,它包含以下属性:

export class CreateUserDto {
  @IsNotEmpty()
  username: string;

  @IsEmail()
  email: string;

  @MinLength(6)
  password: string;
}

在这个 DTO 中,我们使用了 @IsNotEmpty(), @IsEmail()@MinLength(6) 这三个装饰器来对请求参数进行校验。

  • @IsNotEmpty() 装饰器确保 username 属性不是空的。
  • @IsEmail() 装饰器确保 email 属性是一个有效的电子邮件地址。
  • @MinLength(6) 装饰器确保 password 属性的长度不小于 6。
  1. 在控制器中使用 @UsePipes() 装饰器

在控制器中,我们可以使用 @UsePipes() 装饰器来告诉 Nest.js 在处理请求之前使用管道来对请求参数进行校验。

import { Controller, UsePipes, ValidationPipe } from '@nestjs/common';

@Controller('users')
export class UsersController {
  @Post()
  @UsePipes(ValidationPipe)
  create(@Body() createUserDto: CreateUserDto) {
    // ...
  }
}

在上面的代码中,我们使用了 @UsePipes() 装饰器并传递了 ValidationPipe 类作为参数。这告诉 Nest.js 在处理 create() 方法的请求之前,使用 ValidationPipe 来对请求参数进行校验。

如果请求参数不符合校验规则,ValidationPipe 会抛出一个错误。这个错误会被 Nest.js 捕获并返回给客户端。

  1. 自定义错误消息

我们可以自定义 ValidationPipe 的错误消息。

import { Controller, UsePipes, ValidationPipe } from '@nestjs/common';

@Controller('users')
export class UsersController {
  @Post()
  @UsePipes(new ValidationPipe({
    errorHttpStatusCode: 400,
    forbidUnknownValues: true,
    exceptionFactory: (validationErrors: ValidationError[]) => {
      return new HttpException({
        message: 'Validation failed',
        errors: validationErrors,
      }, 400);
    },
  }))
  create(@Body() createUserDto: CreateUserDto) {
    // ...
  }
}

在上面的代码中,我们自定义了 ValidationPipe 的错误消息。

  • errorHttpStatusCode 属性指定了错误的 HTTP 状态码。
  • forbidUnknownValues 属性指定了是否禁止未知的值。
  • exceptionFactory 属性指定了如何生成错误异常。
  1. 管道和拦截器

管道和拦截器都是 Nest.js 中用于处理请求和响应的中间件。

管道在请求处理之前执行,而拦截器在请求处理之后执行。

我们可以使用管道来对请求参数进行校验,也可以使用拦截器来捕获错误并返回给客户端。

通常情况下,我们会使用管道来对请求参数进行校验,然后使用拦截器来捕获错误并返回给客户端。

  1. 总结

Nest Validator 是 Nest.js 中用于对请求参数进行校验的工具。它可以帮助我们轻松地定义和验证请求参数,从而确保传入的数据是合法的。

我们在本文中介绍了如何使用 Nest Validator 来对请求参数进行校验,以及如何自定义错误消息。

希望这篇文章对您有所帮助。