安装依赖包:
npm install --save class-validator class-transformer
src/main.js中添加验证管道:
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({ // 验证管道
whitelist: true,
forbidNonWhitelisted: true // 白名单之外的参数报错
}))
await app.listen(5200);
}
bootstrap();
ValidationPipe有很多参数可以设置,具体可以查看nest.js文档
比如有一个user模块在src/user文件夹下,有一个post接口需要进行数据验证
创建user.dto.ts文件:
import { IsString, IsNumber, Min, IsIn, IsOptional, IsArray } from "class-validator";
import { Transform } from 'class-transformer';
export class UserDto {
@Transform(({value})=> Number(value)) //强制把字符转数字
@IsNumber() //必须是数字
@Min(1) // 最小是1
readonly id: number // id是参数名
@IsString() //必须是字符
readonly username: string
@IsString()
@IsOptional() //可选项,这个参数可以不发或者为空
readonly intro: string
@IsIn(['male','female']) //参数值只能是数组中的其中一位成员
readonly sex: string
}
class-validator中有很多验证条件,详细可以查询文档
在user/user.controller.ts中启用校验:
import {Controller,Post, Body} from '@nestjs/common'
import { UserService} from './user.service'
import { UserDto } from './user.dto';
@Controller('goods')
export class GoodsController {
constructor(private readonly UserService: UserService) {}
@Post()
insert(@Body() body:UserDto):any {
return this.UserService.insert(body)
}
}