Ir para o conteúdo principal

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 install 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.

src/users/dto/create-user.dto.ts
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;
}
tip

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

Leia mais sobre transformação

Agora, podemos usar o ValidationPipe em nossos UsersCommands para aplicar as regras de validação que acabamos de definir.

src/users/users.commands.ts
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:

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

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

You can create filters to handle and response validation errors.

Veja Filtros de Exceção para mais informações