Yo, tengo una aplicación de tienda con nestjs, necesito validar la identificación de mongo, que es pasar por consulta, el problema es que también paso y busco la consulta. Escribo una tubería que valida todos los valores y excluyo esta consulta de búsqueda
@Injectable() export class ValidationObjectId implements PipeTransform { transform(value: UniqueId, metadata: ArgumentMetadata) { if ( !Types.ObjectId.isValid(value) && metadata.data !== "searchString" ) { throw new BadRequestException("Неверный параметр запроса"); } return value; } }Pero este código no es reutilizable para otro caso. Quiero obtener algunos ejemplos, cómo puedo hacer esto
El enfoque más limpio y reutilizable probablemente sería hacer uso de ValidationPipe con Query-DTO-Class.
Echa un vistazo al siguiente ejemplo.
Dentro del controlador , puede pasar una canalización al @Query() -Decorator. Puede usar ValidationPipe que ya viene con Nest y hace uso de los paquetes class-validator y class-transformer .
Puede crear una clase DTO para sus parámetros de consulta como se hizo en PostHelloQuery.dto.ts de mi ejemplo.
import { IsBoolean, IsOptional } from "class-validator"; class PostHelloQueryDTO { @IsOptional() @IsBoolean() public useExclamation?: boolean; } Aquí define restricciones para sus datos usando decoradores de class-validator . Para obtener una lista de todos los decoradores, consulte https://github.com/typestack/class-validator#validation-decorators .
Si ninguno de los validadores se ajusta a sus necesidades, también puede crear su propio decorador como se muestra aquí .
En mi ejemplo, useExclamantion -Query Param es un valor booleano opcional. Tenga en cuenta que los parámetros de consulta entrantes se analizan como cadenas.
La conversión se realiza mediante la enableInplicitConversion como se ve en el controlador:
@Query(new ValidationPipe({ transform: true, transformOptions: {enableImplicitConversion: true}, forbidNonWhitelisted: true }) query: PostHelloQueryDTO Para obtener más información sobre el uso de ValidationPipe con class-validator , puede consultar la documentación de NestJS:
https://docs.nestjs.com/techniques/validación
Para su caso de uso específico (validación de ID de MongoDB), encontré un problema abierto con una implementación de ejemplo para un @IsMongoDB :
https://github.com/typestack/class-validator/issues/630#issuecomment-645638436