4 votes

Comment utiliser une route avec plusieurs dto sur Nestjs ?

Actuellement, j'utilise NestJS pour construire une api reposante. J'ai un ValidationPipe problème. il ne fonctionne qu'au niveau de la méthode du contrôleur et ne fonctionne pas avec les méthodes de service.

Je dois faire des choix pour différents DTO classe ( UserCreateDTO , StaffCreateDTO ...) pour chaque ROLE (admin, staff, utilisateur) sur un route .

1voto

Kim Kern Points 8727

Les pipes ne fonctionnent que sur les contrôleurs, vous ne pouvez pas les utiliser avec les services. Mais vous pouvez utiliser la fonction de validation de classe validate (avec la méthode du transformateur de classe plainToClass ) n'importe où dans votre code :

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

En outre, il n'est pas nécessaire de créer plusieurs classes DTO pour différents rôles. Il suffit d'utiliser class-validator groupes :

Attribuez chaque propriété de votre DTO à un ou plusieurs groupes (= rôles) :

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

Passez ensuite votre groupe (rôles) à plainToClass y 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 });

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X