如何使用类验证器验证 Nest js 中的 uuid 数组?

soy*_*yuz 11 typescript class-validator nestjs

如何验证uuid数组?我使用预构建的ParseArrayPipe来验证有效负载数组结构。

@Post(':id/players')
  addPlayers(
    @Body(new ParseArrayPipe({ items: GamePlayerDto, separator: ',' }))
    gamePlayers: GamePlayerDto,
  ) {
    console.log(gamePlayers);
  }
Run Code Online (Sandbox Code Playgroud)
export class GamePlayerDto {
  @IsUUID()
  playerId!: string;
}
Run Code Online (Sandbox Code Playgroud)

我不想让类验证器检查playerId属性是否在这里,而只是检查原始值

例如,这是我的服务器应该收到的

["73aef2dd-c227-4774-b547-b3117b543863", "73aef2dd-c227-4774-b547-b3117b543863"]
Run Code Online (Sandbox Code Playgroud)

SPS*_*SPS 16

您必须设置选项 - “each: true”。

export class GamePlayerDto {
  @IsUUID(UUIDVersion,{each:true})
  playerId!: string;
}
Run Code Online (Sandbox Code Playgroud)

接受的 UUID 版本值 - '3' | '4' | '5' | 'all' | 3 | 4 | 5;

引用官方文档 - “指定验证值是否是一个数组,并且它的每个项目都必须经过验证。”

本质上,playerId 的值被视为一个数组,并且是 UUID 类型(指定版本),并且每个值都必须经过验证。

更新

还将您的请求处理程序更新为:

@Post(':id/players')
  addPlayers(
    @Body(ValidationPipe))
    gamePlayers: GamePlayerDto,
  ) {
    console.log(gamePlayers);
  }
Run Code Online (Sandbox Code Playgroud)

ValidationPipe是 NestJS 中的默认管道,与类验证器协同工作。它将验证传入的请求正文/参数等,如果不满足 DTO 中设置的条件,则拒绝。


小智 5

你可以用它

@IsUUID(undefined, {each:true})
providers: string[]
Run Code Online (Sandbox Code Playgroud)


小智 0

ParseArrayPipe不验证值,仅将值转换为数组。用于ValidationPipe检查是否是uuid。