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 { IsEmail, IsNotEmpty, IsOptional, IsString } from 'class-validator';
import { StringOption } from 'necord';
export class CreateUserDto {
@IsString()
@IsNotEmpty()
@StringOption({
name: 'name',
description: 'Your name',
required: true
})
public readonly name!: string;
@IsOptional()
@IsEmail()
@StringOption({
name: 'email',
description: 'Your email',
required: false
})
public readonly 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, ValidationPipe } from '@nestjs/common';
import { Context, Options, SlashCommand, SlashCommandContext } from 'necord';
import { CreateUserDto } from './dto/create-user.dto';
@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
): Promise<void> {
await interaction.reply({ content: `User created: ${createUserDto.name}` });
}
}
Now, if we try to use the create command without providing a name, or provide an invalid email, we will get an error message.
{"statusCode":400,"message":["email must be an email"],"error":"Bad Request"}
Vous pouvez créer un snippet pour le décorateur d'options validées :
import { PipeTransform, Type, ValidationPipe } from '@nestjs/common';
import { Options } from 'necord';
export const ValidatedOptions = (
...pipes: Array<PipeTransform | Type<PipeTransform>>
) => Options(...pipes, new ValidationPipe({ validateCustomDecorators: true }));
You can create filters to handle and response validation errors.