Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

172
Vistas
¿Es posible validar que uno de los 2 parámetros esté presente usando el validador de clase?

Al usar el validador de clase junto con NestJS, quiero validar que un usuario proporcione una propertyA A o una propertyB B, pero no es necesario que proporcione ambas.

Actualmente, estoy haciendo algo como:

 export class TestDto { @ValidateIf(obj => !obj.propertyB) @IsString() @IsNotEmpty() propertyA @ValidateIf(obj => !obj.propertyA) @IsString() @IsNotEmpty() propertyB }

Si no proporcionan ninguno de los parámetros, habrá múltiples errores que indiquen que se requieren propertyA y propertyB y deben ser cadenas, etc.

En el caso de que no proporcionen ninguna propiedad, solo querría un único error que diga algo como: "Debe proporcionar la propiedad A o la propiedad B".

¿Se puede lograr esto usando NestJS/class-validator?

about 4 years ago · Juan Pablo Isaza
2 Respuestas
Responde la pregunta

0

Puede hacerlo agregando un nuevo decorador personalizado a su validador de clase.

Primero, debe agregar una clase de validación personalizada (leer documento ) y luego definir un decorador personalizado para eso (leer documento ).

Puedes ver cómo hacerlo en este artículo .

about 4 years ago · Juan Pablo Isaza Denunciar

0

No sé si esta funcionalidad existe en el validador de clase o no, pero simplemente puede lograr este escenario usando Pipes

Simplemente cree una tubería personalizada y luego defina la lógica allí.

 import { PipeTransform, Injectable, ArgumentMetadata, HttpException } from '@nestjs/common'; @Injectable() export class CustomValidationPipe implements PipeTransform { transform(value: TestDto , metadata: ArgumentMetadata) { if(value.porpertyA && value.porpertyB) throw new HttpException("You must provide propertyA or propertyB" , 400) else return value; } }

Después de eso, puedes usar ese Pipe sobre el controlador

 @Post() create(@Body( new CustomValidationPipe()) testDto: TestDto) { return "create Resource" }

También puede usarlo en combinación con un canal de validación incorporado como este. En este caso, su lógica de validación de clase se ejecutará primero y luego se ejecutará su tubería personalizada

 @Post() create(@Body(ValidationPipe , new CustomValidationPipe()) testDto: TestDto) { return "create Resource" }

Espero que esto ayude

about 4 years ago · Juan Pablo Isaza Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda