32

私は NestJS で class-validator パッケージを使用しており、同じレイアウトを持つ正確に 2 つのオブジェクトを持つ必要があるオブジェクトの配列を検証しようとしています:

これまでのところ、私は持っています:

import { IsString, IsNumber } from 'class-validator';

export class AuthParam {
  @IsNumber()
  id: number;

  @IsString()
  type: string;

  @IsString()
  value: string;
}

import { IsArray, ValidateNested } from 'class-validator';
import { AuthParam } from './authParam.model';

export class SignIn {
  @IsArray()
  @ValidateNested({ each: true })
  authParameters: AuthParam[];
}

@kamilg応答ごと(正確に2つの要素を適用できます):

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[];
}

空の配列または AuthParam に関連しない他のオブジェクトを含む配列を渡すことはできます。

どのように変更して検証を取得する必要がありますか?

また、配列に必須の 2 つの要素を強制するにはどうすればよいですか? MinLength(2) は文字列に関するものと思われます... (解決済み)

4

5 に答える 5

89

配列に追加@Type(() => AuthParam)すると、機能するはずです。Typeネストされたオブジェクト (配列) にはデコレータが必要です。あなたのコードは

import { IsArray, ValidateNested, ArrayMinSize, ArrayMaxSize } from 'class-validator';
import { AuthParam } from './authParam.model';
import { Type } from 'class-transformer';

export class SignInModel {
  @IsArray()
  @ValidateNested({ each: true })
  @ArrayMinSize(2)
  @ArrayMaxSize(2)
  @Type(() => AuthParam)
  authParameters: AuthParam[];
}

例外フィルターを使用してエラー応答を変更する場合は注意してください。class-validator エラーの構造を理解していることを確認してください。

于 2019-10-13T18:04:46.993 に答える