5_nest管道和数据校验

管道

Nest 在路由处理器之前调用管道,然后管道接收发往路由处理器的参数

验证输入数据,给输入数据添加字段

管道有两个典型的用例:
验证:评估输入数据,如果有效,则将其原样传递;否则,当数据不正确时抛出一个异常。
转型:把输入数据转换为所需的格式(例如,从字符串到整型)。

设置全局 ValidationPipe
要执行输入验证,用 NestJS 内置的 ValidationPipe。ValidationPipe 提供了一个方便的方法来为所有传入客户端的有效负载强制验证规则,这些验证规则是用来自 class-calidator 的装饰器定义的。
安装对应包

npm install class-validator class-transformer

在main.ts中使用

import { ValidationPipe } from '@nestjs/common';

app.useGlobalPipes(new ValidationPipe({whitelist: true}));

whitelist: 去掉多余的值

在dto中增加规则

// src/articles/dto/create-article.dto.ts


import { ApiProperty } from '@nestjs/swagger';
import {
  IsBoolean,
  IsNotEmpty,
  IsOptional,
  IsString,
  MaxLength,
  MinLength,
} from 'class-validator';


export class CreateArticleDto {
  @IsString()
  @IsNotEmpty()
  @MinLength(5)
  @ApiProperty()
  title: string;


  @IsString()
  @IsOptional()
  @IsNotEmpty()
  @MaxLength(300)
  @ApiProperty({ required: false })
  description?: string;


  @IsString()
  @IsNotEmpty()
  @ApiProperty()
  body: string;


  @IsBoolean()
  @IsOptional()
  @ApiProperty({ required: false, default: false })
  published?: boolean = false;
}

为了替代在路由处理器中手动转型,你可以使用 NestJS 管道自动把 id 转换为数字。将内置的 ParseIntPipe 添加到这三个端点的控制器路由处理器中:
posted @ 2023-10-25 16:19  MyKai  阅读(62)  评论(0)    收藏  举报