Skip to main content

Validation

Le ValidationPipe est un pipe intégré qui peut être utilisé pour valider les données provenant du client. Il utilise le paquet class-validator en interne. Le ValidationPipe offre une approche pratique pour appliquer des règles de validation à toutes les charges utiles entrantes du client, où les règles spécifiques sont déclarées à l'aide de simples annotations dans les déclarations de DTO de chaque module.

Installation

$ npm install class-validator class-transformer

Utilisation

Nous pouvons maintenant ajouter quelques règles de validation dans notre CreateUserDto. Pour cela, nous utilisons les décorateurs fournis par le paquet class-validator, décrits en détail ici. De cette manière, toute route qui utilise le CreateUserDto appliquera automatiquement ces règles de validation.

src/users/dto/create-user.dto.ts
import { IsNotEmpty, IsString, IsEmail } from 'class-validator';

export class CreateUserDto {
@StringOption({
name: 'name',
description: 'Your name',
required: true
})
name: string;

@IsEmail()
@StringOption({
name: 'text',
description: 'Your email',
required: false
})
email: string;
}
astuce

Also you can use ValidationPipe for transforming and validating the payload of a request.

En savoir plus sur la transformation

Nous pouvons maintenant utiliser le ValidationPipe dans notre UsersCommands pour appliquer les règles de validation que nous venons de définir.

src/users/users.commands.ts
import { Injectable } from '@nestjs/common';
import { Context, SlashCommand, SlashCommandContext } from 'necord';

@Injectable()
export class UsersCommands {
@SlashCommand({
name: 'create',
description: 'Create a new user'
})
public async onCreateUser(
@Context() [interaction]: SlashCommandContext,
@Options(new ValidationPipe({ validateCustomDecorators: true })) createUserDto: CreateUserDto
) {
return interaction.reply({ content: `User created: ${createUserDto.name}` });
}
}

Maintenant, si nous essayons d'utiliser la commande create sans fournir de nom ou d'email, nous obtiendrons un message d'erreur.

{"statusCode":400,"message":["email should not be empty"],"error":"Bad Request"}

Vous pouvez créer un snippet pour le décorateur d'options validées :

src/decorators/validated-options.decorator.ts
import { ValidationPipe, PipeTransform } from '@nestjs/common';

export const ValidatedOptions = (...dataOrPipes: PipeTransform[] | string) => {
return Options(...dataOrPipes, new ValidationPipe());
};
astuce

You can create filters to handle and response validation errors.

Consultez les Exception Filters pour plus d'informations