我正在尝试验证PUT users/端点的参数,但我希望所有参数都是可选的,但是一旦 api 使用者填写这些参数,我想验证它们。
我试图将@ApiModelProperty required false与验证管道装饰器结合起来,但验证管道接管了ApiModelProperty
(发送400 个错误请求 非常正常HttpException)
这是我的 DTO - usersUpdate.dto.ts:
import { IsEmail, IsEnum, IsPhoneNumber, IsEmpty } from 'class-validator';
import { ApiModelProperty } from '@nestjs/swagger';
import { RoleType } from './role-type.enum';
class UserInfo {
@ApiModelProperty({ description: 'User firstname', required: false })
readonly firstname: string;
@ApiModelProperty({ description: 'User lastname', required: false })
readonly lastname: string;
@ApiModelProperty({description: 'User postal address', required: false })
readonly address: string;
@ApiModelProperty({ description: 'User phone number', required: false })
@IsPhoneNumber('FR')
readonly phone: string;
@ApiModelProperty({ description: 'User siret number', required: false })
readonly siret: string;
}
export class UpdateUserDTO {
@ApiModelProperty({ description: 'User email address', required: false })
readonly email: string;
@ApiModelProperty({ description: 'User password', required: false })
readonly password: string;
@ApiModelProperty({ description: 'User informations', required: false })
readonly user_info: UserInfo;
@ApiModelProperty({ enum: ['Admin', 'Runner', 'Dispatcher'], description:'User role', required: false })
readonly role: RoleType;
@ApiModelProperty({ description: 'User activation token', required: false })
readonly activationToken: string;
}
Run Code Online (Sandbox Code Playgroud)
我想@IsEmail()在电子邮件参数上使用和装饰器,并@Enum()在角色中使用装饰器,但是一旦我使用这些装饰器,该参数是强制性的。
如果参数为空,有人知道如何跳过此验证器吗?
是的,您可以通过应用class-validator 中的@IsOptional装饰器来让验证器在字段上是可选的。
您可以使用而不是的另一件事@ApiModelProperty({ description: 'User activation token', required: false })是@ApiModelPropertyOptional删除声明的required: false部分。
最后,您甚至可以使用@IsEmail()装饰器来验证电子邮件字段是否为电子邮件,您可以做的最后一件事是合并@IsNotEmpty(),@IsOptional()以便在提供字段时它不应为空。
提供的代码如下所示:
import { IsEmail, IsEnum, IsPhoneNumber, IsEmpty, IsOptional } from 'class-validator';
import { ApiModelPropertyOptional } from '@nestjs/swagger';
import { RoleType } from './role-type.enum';
class UserInfo {
@ApiModelPropertyOptional({ description: 'User firstname' })
@IsOptional()
readonly firstname: string;
@ApiModelPropertyOptional({ description: 'User lastname' })
@IsOptional()
readonly lastname: string;
@ApiModelPropertyOptional({description: 'User postal address' })
@IsOptional()
readonly address: string;
@ApiModelPropertyOptional({ description: 'User phone number' })
@IsOptional()
@IsPhoneNumber('FR')
readonly phone: string;
@ApiModelPropertyOptional({ description: 'User siret number' })
@IsOptional()
readonly siret: string;
}
export class UpdateUserDTO {
@ApiModelPropertyOptional({ description: 'User email address' })
@IsEmail()
@IsOptional()
readonly email: string;
@ApiModelPropertyOptional({ description: 'User password' })
@IsOptional()
readonly password: string;
@ApiModelPropertyOptional({ description: 'User informations' })
@IsOptional()
readonly user_info: UserInfo;
@ApiModelPropertyOptional({ enum: ['Admin', 'Runner', 'Dispatcher'], description:'User role' })
@IsEnum(RoleType)
@IsOptional()
readonly role: RoleType;
@ApiModelPropertyOptional({ description: 'User activation token' })
@IsOptional()
readonly activationToken: string;
}
Run Code Online (Sandbox Code Playgroud)
如果有帮助,请告诉我;)