Как указать минимальную и максимальную длину для полей в Loopback 4? - PullRequest
0 голосов
/ 22 февраля 2019

Я определил свойство в моей модели следующим образом:

@property({
    type: 'string',
    required: true,
    min: 2,
    max: 255
})
name: string

Однако, когда я отправляю поле, состоящее из 1 символа, это не выдает мне ошибку.Кто-нибудь может мне помочь в этом?

Ответы [ 2 ]

0 голосов
/ 21 мая 2019

Это должно быть, как показано ниже,

@property({
   type: 'string',
   required: true,
   jsonSchema: {
      maxLength: 30,
      minLength: 10,
   },
})
name: string

Вы можете сослаться на документ здесь

0 голосов
/ 24 февраля 2019

Loopback 4 (как и Loopback 3) не поддерживает свойства min / max по умолчанию и не будет использовать его для проверки данных, отправляемых в API.Вы можете увидеть список поддерживаемых свойств свойств в документации для Loopback 3 , поскольку ничего не изменилось в Loopback 4.

Ниже приведен оператор из документации Loopback 4 :

Данные из тела запроса проверяются на соответствие его спецификации схемы OpenAPI.Мы используем модуль AJV для выполнения проверки, которая проверяет данные с помощью схемы JSON, сгенерированной из спецификации схемы OpenAPI.

Из Документация Open V3 API мы видим, что они поддерживают string Тип данных и

Длина строки может быть ограничена с помощью minLength и maxLength:

AJV поддерживает свойства minLength и maxLength тоже , но по некоторым причинамВ Loopback 4 пока нет простого встроенного способа определения этих свойств с помощью декоратора @property.

В любом случае, я нашел обходной путь, который вы можете использовать сейчас:

import { Entity, model, property, Model } from '@loopback/repository';
import { getJsonSchema } from '@loopback/repository-json-schema';

@model()
export class MyModel extends Model {
  @property({
    type: 'string',
    required: true,
  })
  name: string;

  constructor(data?: Partial<MyModel>) {
    super(data);
  }

  static initialize() {
    let jsonSchema = getJsonSchema(MyModel) as any;
    jsonSchema.properties.name.minLength = 2;
    jsonSchema.properties.name.maxLength = 255;
  }
}

MyModel.initialize();

Обратите внимание, что вся магия происходит в методе MyModel.initialize, где я инициализирую jsonSchema, используя стандартную функцию getJsonSchema (часть обратной петли).Затем я расширяю этот jsonSchema дополнительными minLength и maxLength свойствами.Внутри функции getJsonSchema они используют кэш для схем json, поэтому схема генерируется только один раз для каждой модели в течение жизненного цикла приложения, что гарантирует, что значения, которые мы установим, будут оставаться там каждый раз, когда эта схема json будет запрошена позже.

Вы также можете увидеть связанные проблемы на странице Github Loopback Next:

Надеемся, что в какой-то момент они будут поддерживать эти типы валидаций, а также пользовательские валидаторы, изначально встроенные в Loopback-декораторы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...