在 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
您还将删除所有未定义的键值对,这非常有帮助。
如何为每个请求指定一个字段具有默认值?并非针对所有请求。我知道如何在 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
您还将删除所有未定义的键值对,这非常有帮助。