#javascript #node.js #typescript #nestjs #class-validator
#javascript #node.js #typescript #nestjs #class-validator
Вопрос:
Я пытаюсь принудительно выполнить проверку каждого элемента массива.
Насколько я понимаю (пожалуйста, поправьте меня, если я ошибаюсь), class-validator не поддерживает прямую проверку массивов. Это требует от нас создания класса-оболочки.
Итак, ниже приведены классы:
export class SequenceQuery {
@MinLength(10, {
message: 'collection name is too short',
})
collection: string;
identifier: string;
count: number;
}
export class SequenceQueries{
@ValidateNested({ each: true })
queries:SequenceQuery[];
}
И вот что является моим контроллером:
@Get("getSequence")
async getSequence(@Body() query:SequenceQueries) {
return await this.sequenceService.getNextSequenceNew(query)
}
Ниже приведен JSON, который я передаю контроллеру:
{"queries": [
{
"collection": "A",
"identifier": "abc",
"count": 1
},
{
"collection": "B",
"identifier": "mno",
"count": 5
},
{
"collection": "C",
"identifier": "xyz",
"count": 25
}
]}
Но, похоже, это не работает. Он не выдает никаких подтверждающих сообщений.
Ответ №1:
Я получил решение проблемы.
Я должен был изменить свой класс-оболочку на :
export class SequenceQueries{
@ValidateNested({ each: true })
@Type(() => SequenceQuery) // added @Type
queries:SequenceQuery[];
}
Но я оставлю этот вопрос открытым, на всякий случай, если у кого-то есть альтернативное решение, например, не создавать класс-оболочку.
Ответ №2:
class-validator поддерживает проверку массива, вам нужно просто добавить то, что вы уже сделали в @ValidateNested({ each: true }), вам нужно только добавить каждый в элемент коллекции:
export class SequenceQuery {
@MinLength(10, {
each: true,
message: 'collection name is too short',
})
collection: string;
identifier: string;
count: number;
}
источник : Проверочный массив