J'utilise un package de validation de classe avec NestJS et je cherche à valider un tableau d'objets qui doivent avoir exactement 2 objets avec la même disposition:
Jusqu'à présent, j'ai:
import { IsString, IsNumber } from 'class-validator';
export class AuthParam {
@IsNumber()
id: number;
@IsString()
type: string;
@IsString()
value: string;
}
et
import { IsArray, ValidateNested } from 'class-validator';
import { AuthParam } from './authParam.model';
export class SignIn {
@IsArray()
@ValidateNested({ each: true })
authParameters: AuthParam[];
}
par réponse @kamilg (je suis en mesure d'appliquer exactement 2 éléments):
import { IsArray, ValidateNested, ArrayMinSize, ArrayMaxSize } from 'class-validator';
import { AuthParam } from './authParam.model';
export class SignInModel {
@IsArray()
@ValidateNested({ each: true })
@ArrayMinSize(2)
@ArrayMaxSize(2)
authParameters: AuthParam[];
}
Je peux toujours passer un tableau vide ou un tableau avec d'autres objets non liés à AuthParam.
Comment dois-je le modifier pour obtenir la validation?
Aussi comment puis-je appliquer 2 éléments obligatoires dans le tableau? MinLength (2) semble concerner la chaîne ... (résolu)
const param1: AuthParam = Object.assign(new AuthParam(), {
id: 1,
type: 'grant',
value: 'password'
})
const param2: AuthParam = Object.assign(new AuthParam(), {
id: 1,
type: 4,
value: 'password'
})
const signInTest = new SignInModel()
signInTest.authParameters = [param1, param2]
validate(signInTest).then(e => {
console.log(e[0].children[0].children[0])
})
Cela fonctionne correctement, c'est:
ValidationError {
target: AuthParam { id: 1, type: 4, value: 'password' },
value: 4,
property: 'type',
children: [],
constraints: { isString: 'type must be a string' } }
donc je peux seulement supposer que l'objet qui est en cours de validation, n'est pas une instance de AuthParam
const param2: AuthParam = {
id: 1,
type: 4,
value: 'password'
} as any
comme prévu, il n'y a pas de décorateurs sur cet objet (ce qui peut être vrai pour les contrôleurs Nest.js et les objets imbriqués de body/req) - la validation est donc ignorée.
Veuillez vérifier ceci (tl; dr - @Type
formulaire décorateur class-transformer
)
https://github.com/typestack/class-validator/pull/295
Vient de paraître dans v0.10.2
, donc ça devrait aider, j'espère!