Validação
O ValidationPipe
é um pipe interno que pode ser usado para validar dados provenientes do cliente. Ele usa o pacote class-validator debaixo do pano. O ValidationPipe
fornece uma abordagem conveniente para aplicar regras de validação para todas as cargas do cliente de entrada, onde as regras específicas são declaradas com anotações simples nas declarações DTO em cada módulo.
Instalação
- npm
- Yarn
- pnpm
$ npm install class-validator class-transformer
$ yarn add class-validator class-transformer
$ pnpm add class-validator class-transformer
Utilização
Agora podemos adicionar algumas regras de validação em nosso CreateUserDto
. Fazemos isso usando os decoradores fornecidos pelo pacote class-validator, descrito em detalhes aqui. Desta forma, qualquer rota que usar o CreateUserDto
irá automaticamente impor estas regras de validação.
import { IsNotEmpty, IsString, IsEmail } from 'class-validator';
export class CreateUserDto {
@StringOption({
name: 'nome',
description: 'Seu nome',
required: true
})
name: string;
@IsEmail()
@StringOption({
name: 'text',
description: 'Seu email',
required: false
})
email: string;
}
Also you can use ValidationPipe
for transforming and validating the payload of a request.
Agora, podemos usar o ValidationPipe
em nossos UsersCommands
para aplicar as regras de validação que acabamos de definir.
import { Injectable } from '@nestjs/common';
import { Context, SlashCommand, SlashCommandContext } from 'necord';
@Injectable()
export class UsersCommands {
@SlashCommand({
name: 'criar',
description: 'Cria um novo usuário'
})
public async onCreateUser(
@Context() [interaction]: SlashCommandContext,
@Options(new ValidationPipe({ validateCustomDecorators: true })) createUserDto: CreateUserDto
) {
return interaction.reply({ content: `Usuário criado: ${createUserDto.name}` });
}
}
Agora, se tentarmos usar o comando criar
sem fornecer um nome ou e-mail, recebemos uma mensagem de erro.
{"statusCode":400,"message":["email não deve estar vazio"],"erro":"Bad Request"}
Você pode criar um snippet do decorador que valida opçõ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.