4

目前我正在使用 NestJS 来构建 restful api。我有ValidationPipe问题。它仅适用于控制器方法,不适用于服务方法。

我需要为每个DTO(管理员UserCreateDTO、员工、用户)在.StaffCreateDTOROLEroute

4

1 回答 1

1

管道仅适用于控制器,您不能将它们与服务一起使用。但是您可以在代码中的任何位置使用类验证器的validate方法(连同类转换器的plainToClass方法):

const user = plainToClass(UserCreateDto, userRequestEntity);
const errors = await validate(user)
if (errors.length > 0) {
  throw this.createError(errors);
}

此外,您不需要为不同的角色创建多个 DTO 类。只需使用class-validator

将 DTO 中的每个属性分配给一个或多个组(= 角色):

@Min(12, {groups: ['admin', 'staff']})
age: number;
@Length(2, 20, {groups: ['admin']})
name: string;

然后将您的组(角色)传递给plainToClassand 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 });
于 2019-01-07T21:39:51.927 回答