NestJS: проверка массива объектов с помощью class-validator

#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;
 

}

источник : Проверочный массив