在 class-validator 中为 NestJS 中的每个请求定义随机默认值

Define random default value in class-validator for each request in NestJS

如何为每个请求指定一个字段具有默认值?并非针对所有请求。我知道如何在 class-validator:

中传递字段的默认值
export class CreateUserDto {
  @IsString()
  username = "static-username";
}

但是这段代码会导致所有请求的静态默认值,但我需要为每个请求生成一个用户名。注意:我知道我可以在控制器中处理这些类型的 problems/issues。但我认为最好在验证器中处理它。在下面的示例中,您可以通过在控制器中处理随机值来理解我的意思:

class CreateUserDto {
  @IsOptional()
  @IsString()
  username?: string;
}

/* ... */
@Post('/users')
async createUser(@Body user: CreateUserDto) {
  if (user.username === undefined) {
    user.username = `random-${Math.random()}`
  }
}
/* ... */

您只能在 DTO 中发回静态值是不正确的。你可以简单地这样做:

class CreateUserDto {
  @IsOptional()
  @IsString()
  username: string = `random-${Math.random()}`
}

/* ... */
@Post('/users')
async createUser(@Body(new ValidationPipe({ whitelist: true })) user: CreateUserDto) {
  console.log(user.username) // random-0.8392092045730202
}
/* ... */

也许您在测试时遇到的问题是您没有启用 ValidationPipe:@Body user: CreateUserDto 必须是 @Body(ValidationPipe) user: CreateUserDto。使用 whitelist: true 您还将删除所有未定义的键值对,这非常有帮助。