管道格式校验
都是要配合这个东西的/ 在字段中使用
@IsString()
@IsNumber()@Optional()
依赖
npm i --save class-validator class-transformer
app.useGlobalPipes(new ValidationPipe(//参数说明
{
whitelist:true, // 返回的时候 会自动过滤掉不属于规定的格式
transform; true, // 可以进行类型转换
forbidNonWhitelisted:true // 开启之后请求中的参数如果与 规定的不一样(多了或者少了直接badrequest)
}
));
可以在整个模块、controller、单个方法、方法参数 使用usePipe(ValidationPipe)
整个模块
@Module({
imports:[TypeOrmModule.forFeature([User,Follower]),ConfigModule.forFeature(userConfig)],
controllers: [UserController],
providers: [UserService,{
provide:APP_PIPE,
useClass:ValidationPipe
}],
exports:[UserService]
})
export class UserModule {}
在controller中使用
@UsePipes(ValidationPipe)
@Controller('user')
export class UserController {----}
直接在方法上使用
@Post()
@UsePipes(ValidationPipe)
create(@Body() createUserDto: CreateUserDto) {
return this.userService.create(createUserDto);
}
在参数中使用
create(@Body(ValidationPipe) createUserDto: CreateUserDto)
自定义pipe
import { ArgumentMetadata, BadRequestException, Injectable, PipeTransform } from '@nestjs/common';
@Injectable()
export class ParseIntPipe implements PipeTransform {
transform(value: string, metadata: ArgumentMetadata) {
const val = parseInt(value,10)
if(isNaN(val)){
throw new BadRequestException(`${value} is not a number`)
}
return val;
}
}