class-validator 是如何工作的?
How is class-validator works?
我的应用程序与 NestJs 分别带有服务器和客户端,在服务器端我使用 ValidationPipe
并在 DTO 类 上使用装饰器,例如
export class SearchDto {
@IsOptional()
readonly offset?: string;
@IsString()
readonly value: string;
@IsNumber()
readonly limit: number;
}
一切正常,但在客户端,我不能将 类 与装饰器一起使用(它的严格规则),我只需要像 type
一样使用它,- const search: SearchDto = await...
class-validator
(class-transformer
) 在没有 ValidationPipe
的情况下如何工作?它是像在服务器端一样包装它还是完全忽略它?它调用 __decorate
并将其放入 js 包中吗?
否则我需要这样写接口
export class SearchDto implements ISearchDto {
@IsOptional()
readonly offset?: string;
@IsString()
readonly value: string;
@IsNumber()
readonly limit: number;
}
export interface ISearchDto {
offset?: string;
value: string;
limit: number;
}
let decorated: SearchDto;
let nonDecorated: ISearchDto;
感谢您的帮助
如果不允许将 classes 与装饰器一起使用,您可能需要考虑使用 class-validator with schemas,这样就不需要装饰器了。
Class-validator 的工作原理是通过它使用的装饰器设置字段的元数据,并且只能在类型上做这么多。然后库读取该元数据并根据 object/field 的当前类型检查它并确定其条件是否满足。该库是独立的,因此不需要访问服务器或其他任何东西。如果你查看 source code for the ValidationPipe
,你会发现 Nest 只是用 class-transformer
转换对象(也称为反序列化),使 JSON 对象成为 JavaScript Class,然后通过 class-validator
运行 class,检查结果,然后 returns,对象的实例(如果在选项中设置了 transform: true
),或经过验证后的原始有效负载。
虽然可以通过上面第一个 link 中描述的模式文件来模拟这些装饰器定义的元数据。
我的应用程序与 NestJs 分别带有服务器和客户端,在服务器端我使用 ValidationPipe
并在 DTO 类 上使用装饰器,例如
export class SearchDto {
@IsOptional()
readonly offset?: string;
@IsString()
readonly value: string;
@IsNumber()
readonly limit: number;
}
一切正常,但在客户端,我不能将 类 与装饰器一起使用(它的严格规则),我只需要像 type
一样使用它,- const search: SearchDto = await...
class-validator
(class-transformer
) 在没有 ValidationPipe
的情况下如何工作?它是像在服务器端一样包装它还是完全忽略它?它调用 __decorate
并将其放入 js 包中吗?
否则我需要这样写接口
export class SearchDto implements ISearchDto {
@IsOptional()
readonly offset?: string;
@IsString()
readonly value: string;
@IsNumber()
readonly limit: number;
}
export interface ISearchDto {
offset?: string;
value: string;
limit: number;
}
let decorated: SearchDto;
let nonDecorated: ISearchDto;
感谢您的帮助
如果不允许将 classes 与装饰器一起使用,您可能需要考虑使用 class-validator with schemas,这样就不需要装饰器了。
Class-validator 的工作原理是通过它使用的装饰器设置字段的元数据,并且只能在类型上做这么多。然后库读取该元数据并根据 object/field 的当前类型检查它并确定其条件是否满足。该库是独立的,因此不需要访问服务器或其他任何东西。如果你查看 source code for the ValidationPipe
,你会发现 Nest 只是用 class-transformer
转换对象(也称为反序列化),使 JSON 对象成为 JavaScript Class,然后通过 class-validator
运行 class,检查结果,然后 returns,对象的实例(如果在选项中设置了 transform: true
),或经过验证后的原始有效负载。
虽然可以通过上面第一个 link 中描述的模式文件来模拟这些装饰器定义的元数据。