我在我的模型中定义了如下属性:

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

但是,当我发送由 1 个字符组成的字段时,它没有向我抛出错误。有人可以帮我吗?

最佳答案

Loopback 4(以及 Loopback 3)默认不支持 min/max 属性,并且不会使用它来验证您发送到 API 的数据。您可以看到 supported property properties in the documentation for Loopback 3 的列表,因为 Loopback 4 中没有任何变化。

以下是来自 the Loopback 4 documentation 的声明:



Open API V3 documentation 我们可以看到它们支持 string 数据类型和



AJV support minLength and maxLength properties too ,但出于某种原因,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。然后我用额外的 jsonSchemaminLength 属性扩展这个 maxLength。在 getJsonSchema 函数内部,它们为 json 模式使用缓存,因此在应用程序生命周期中,每个模型只生成一次模式,这确保了我们设置的值将在以后每次请求此 json 模式时保留在那里。

你也可以在 Loopback Next 的 Github 页面上看到相关问题:
  • Epic: Validation at Model/ORM level
  • Complex OpenAPI Validations with @property

  • 希望它们能在某个时候支持这些类型的验证以及在 Loopback 装饰器中原生的自定义验证器。

    关于javascript - 如何为 Loopback 4 中的字段指定最小和最大长度?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/54832255/

    10-11 06:40