从零开始搭建nestjs项目-5 参数校验

相关包下载

pnpm install class-validator class-transformer

全局使用

import { NestFactory } from '@nestjs/core';
import { AppModule } from './app.module';
import { ValidationPipe } from "@nestjs/common";

async function bootstrap() {
  const app = await NestFactory.create(AppModule);

  // 全局使用管道,用于 Controller 层参数校验
  app.useGlobalPipes(new ValidationPipe());
  await app.listen(3000);
}
bootstrap();

用法说明

// class-validator 常用的装饰器:
// @IsNumber():验证值是否为数字类型
// @IsString():验证值是否为字符串类型
// @IsBoolean():验证值是否为布尔类型
// @IsNotEmpty():验证值是否非空
// @IsOptional():验证值是否可选
// @IsEmail():验证值是否为有效的电子邮件地址
// @IsUrl():验证值是否为有效的 URL 地址
// @IsDate():验证值是否为有效的日期
// @Min():验证值是否大于或等于指定的最小值
// @Max():验证值是否小于或等于指定的最大值
// @Length():验证字符串长度是否在指定的范围内
// @Matches():验证字符串是否匹配指定的正则表达式
// @IsIn():验证值是否属于指定的允许值列表
// @IsNotEmptyObject():验证对象是否为非空对象

例如:

import { IsNotEmpty, IsString, IsNumber, IsIn } from "class-validator";

export class AddUserDto {
  @IsNotEmpty({ message: "id should not be empty" })
  @IsNumber({ allowNaN: false }, { message: "id must be a number" })
  id: number;

  @IsNotEmpty()
  @IsString()
  name: string;

  @IsNotEmpty()
  @IsNumber()
  age: number;

  @IsNotEmpty()
  @IsIn([1, 2])
  gender: string;
}

参数校验在控制层起作用,如在user.controller.ts中:

 addUser(@Body() userData: AddUserDto): UserItem[] {
    return this.userService.addUser(userData);
  }

参考文章:参数校验 | Nest.js 入门及实践 (yingjieweb.github.io)

版本
  1. nodejs:20.9.0
  2. npm:10.1.0
  3. nestjs:10.0.0
  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
NestJS 中,可以使用 class-validator 库进行请求参数校验。下面是一个简单的示例代码: 1. 首先,您需要安装 class-validator 和 class-transformer 库: ``` npm install class-validator class-transformer ``` 2. 在您的 DTO(Data Transfer Object)类中定义请求参数的验证规则。例如,假设您有一个 UserDto 类来处理用户注册请求: ```typescript import { IsNotEmpty, IsEmail } from 'class-validator'; export class UserDto { @IsNotEmpty() username: string; @IsNotEmpty() @IsEmail() email: string; @IsNotEmpty() password: string; } ``` 3. 在您的控制器中使用这个 DTO 类,并使用 @Body() 装饰器将请求体绑定到 DTO 对象: ```typescript import { Controller, Post, Body } from '@nestjs/common'; import { UserDto } from './user.dto'; @Controller('users') export class UserController { @Post() createUser(@Body() userDto: UserDto) { // 这里的 userDto 将自动根据定义的验证规则进行校验 // 如果校验失败,NestJS 会抛出 BadRequestException 异常 // 您可以在这里处理校验失败的逻辑 // 如果校验通过,可以继续处理用户注册逻辑 // ... } } ``` 在上述示例中,我们使用了 IsNotEmpty 和 IsEmail 等验证装饰器来定义验证规则。您可以根据需要使用其他 class-validator 提供的装饰器来定义更复杂的验证规则。 请注意,NestJS 默认情况下会使用 class-transformer 库对请求体进行转换。这意味着,如果您在请求体中接收的是 JSON 字符串,NestJS 会自动将其转换为 DTO 对象。如果您不想使用这种转换,请在 main.ts 文件中禁用它: ```typescript import { NestFactory } from '@nestjs/core'; import { AppModule } from './app.module'; async function bootstrap() { const app = await NestFactory.create(AppModule, { bodyParser: false }); await app.listen(3000); } bootstrap(); ``` 以上就是在 NestJS 中进行请求参数校验的基本方法。您可以根据具体的需求进一步扩展和定制验证规则。希望能对您有所帮助!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值