管道仅适用于控制器,不能将它们与服务一起使用。但你可以只使用类验证器validate
方法(与类转换器一起plainToClass
方法)在代码中的任何位置:
const user = plainToClass(UserCreateDto, userRequestEntity);
const errors = await validate(user)
if (errors.length > 0) {
throw this.createError(errors);
}
此外,您不需要为不同的角色创建多个 DTO 类。只需使用class-validator
groups https://github.com/typestack/class-validator#validation-groups:
将 DTO 中的每个属性分配给一个或多个组(= 角色):
@Min(12, {groups: ['admin', 'staff']})
age: number;
@Length(2, 20, {groups: ['admin']})
name: string;
然后将您的组(角色)传递给plainToClass
and validate
.
// Pass your roles as groups
const groups = ['admin'];
// Transform to class with groups
const entityClass = plainToClass(EntityDto, entity, { groups })
// Validate with groups
const errors = await validate(entityClass, { groups });