#nestjs #class-validator
#nestjs #class-validator
Вопрос:
У меня возникли трудности с проверкой вложенного объекта. Запуск NestJS с использованием class-validator. Поля верхнего уровня (first_name, last_name и т.д.) проверяются нормально. Объект Profile проверяется нормально на верхнем уровне, т.Е. Если я отправляю в виде массива, я получаю обратно правильную ошибку, что это должен быть объект.
Однако содержимое Profile не проверяется. Я следовал предложениям в документах, но, возможно, я просто что-то упускаю.
Кто-нибудь знает, как проверять поля вложенных объектов?
export enum GenderType {
Male,
Female,
}
export class Profile {
@IsEnum(GenderType) gender: string;
}
export class CreateClientDto {
@Length(1) first_name: string;
@Length(1) last_name: string;
@IsEmail() email: string;
@IsObject()
@ValidateNested({each: true})
@Type(() => Profile)
profile: Profile;
}
Когда я отправляю эту полезную нагрузку, я ожидаю, что она завершится неудачей, потому что пол отсутствует в перечислении или строке. Но это не сбой
{
"first_name":"A",
"last_name":"B",
"profile":{
"gender":1
}
}
Ответ №1:
Это поможет:
export enum GenderType {
Male = "male",
Female = "female",
}
export class Profile {
@IsEnum(GenderType)
gender: GenderType;
}
export class CreateClientDto {
@IsObject()
@ValidateNested()
@Type(() => Profile)
profile: Profile;
}
P.S: Вам не нужно {each: true}
, потому что это объект, а не массив
Комментарии:
1. это то, что у меня есть в моем коде. Я пробовал с {each:true} и без. Возможно, у меня проблема со средой.
2. Итак, позвольте мне спросить так, какой запрос отправляется? Какой ответ вы получаете? Какой ответ вы ожидаете увидеть? Я все еще не понимаю, в чем ваша проблема. Можете ли вы также опубликовать объект profile в своем коде?
3. Я добавил образец полезной нагрузки. не принимает ли class-validator перечисления?
Ответ №2:
https://www.typescriptlang.org/docs/handbook/enums.html#string-enums
В документах TS указано инициализировать перечисление строк.
Поэтому мне нужно было иметь:
export enum GenderType {
Male = 'Male',
Female = 'Female',
}
Комментарии:
1. То, что вы сделали, правильно,
gender: GenderType
так и должно быть, а не string!2. Упс! Теперь я знаю, почему это происходит! потому что перечисления заменяются на number! если только вы не определите для них строку!
gender: 1
на самом деле это женщина! иgender: 0
является мужской причиной, потому что он определен как второй элемент в вашем классе enum! Я отредактировал свой ответ! проверьте это еще раз!