Как использовать один маршрут с несколькими dto на Nestjs? - PullRequest
0 голосов
/ 07 января 2019

В настоящее время я использую NestJS для создания успокоительного API. У меня проблема ValidationPipe. он работает только на методе контроллера и не работает с методами обслуживания.

Мне нужно выбрать другой класс DTO (UserCreateDTO, StaffCreateDTO, ...) для каждого ROLE (администратор, персонал, пользователь) на route.

1 Ответ

0 голосов
/ 08 января 2019

Трубы работают только на контроллерах, вы не можете использовать их со службами. Но вы можете просто использовать метод 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;

Затем передайте свою группу (роли) plainToClass и 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 });
...