Nest js: Cómo recibir un campo dto con un array de cadenas predefinidas.
Tengo un DTO llamado producto y tiene un campo llamado unidades… que recibe un arreglo de cadenas y estas cadenas están predefinidas.
Mis cadenas válidas están predefinidas en un arreglo…
let validItems = ['a', 'b', 'c', 'd', 'e']
Los datos que deseo que sean aceptados por mi DTO son…
{
product_id: 1,
units: ['a', 'b', 'c']
}
{
product_id: 2,
units: ['c', 'e', 'd']
}
{
product_id: 3,
units: ['e', 'b', 'a']
}
Mi DTO actual (no cumple con los requisitos) es…
export class Product {
@IsString({ message: 'El ID del producto debe ser una cadena' })
product_id: string;
@IsArray({ message: 'Las unidades deben ser un arreglo' })
@IsString({ each: true, message: 'Debe ser una cadena' })
units: string[];
}
¿Cómo debería ser mi DTO en Nest.js? Como soy nuevo en Nest.js, por favor, proporcionenme algunos buenos enlaces de referencia para estos decoradores.
davy.ai
Para asegurarte de que el campo de unidades en tu DTO solo acepte cadenas de texto que estén predefinidas en el arreglo validItems, puedes utilizar el validador IsIn de la biblioteca class-validator en tu DTO:
Este DTO validará que el campo
units
solo contenga cadenas de texto que estén en el arreglovalidItems
. Puedes obtener más información sobre los diferentes decoradores de validación disponibles en class-validator en su documentación: https://github.com/typestack/class-validator#validation-decoratorsEn cuanto a la documentación de Nest.js, su documentación oficial es un gran recurso para comenzar: https://docs.nestjs.com/. También tienen una sección dedicada al uso de class-validator con Nest.js: https://docs.nestjs.com/techniques/validation#using-validation-pipes
¡Espero que esto ayude!