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
- Yarn
- pnpm
- Bun
$ npm install class-validator class-transformer
$ yarn add class-validator class-transformer
$ pnpm add class-validator class-transformer
$ bun add 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.
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;
}
Also you can use ValidationPipe for transforming and validating the payload of a request.
Nous pouvons maintenant utiliser le ValidationPipe dans notre UsersCommands pour appliquer les règles de validation que nous venons de définir.
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 :
import { ValidationPipe, PipeTransform } from '@nestjs/common';
export const ValidatedOptions = (...dataOrPipes: PipeTransform[] | string) => {
return Options(...dataOrPipes, new ValidationPipe());
};
You can create filters to handle and response validation errors.