Как использовать один маршрут с несколькими dto на Nestjs?
В настоящее время я использую NestJS для создания успокоительного API. У меня есть ValidationPipe
проблема. это работает только на методе контроллера и не работает с методами обслуживания.
Мне нужно сделать выбор для разных DTO
учебный класс (UserCreateDTO
, StaffCreateDTO
,...) для каждого ROLE
(администратор, персонал, пользователь) на route
,
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;
Затем передайте свою группу (роли) 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 });