如何为Loopback 4中的字段指定最小和最大长度?

问题描述 投票:2回答:2

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

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

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

javascript loopback
2个回答
2
投票

Loopback 4(以及Loopback 3)默认情况下不支持min / max属性,也不会将其用于验证发送给API的数据。您可以在Loopback 4中看到supported property properties in the documentation for Loopback 3列表,因为没有任何变化。

以下是the Loopback 4 documentation的声明:

来自请求正文的数据根据​​其OpenAPI架构规范进行验证。我们使用AJV模块执行验证,验证使用从OpenAPI模式规范生成的JSON模式验证数据。

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

可以使用minLength和maxLength限制字符串长度:

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。然后我扩展这个jsonSchema与额外的minLengthmaxLength属性。在getJsonSchema函数内部,他们使用json模式的缓存,因此在应用程序生命周期期间为每个模型生成一次模式,这确保我们设置的值将在每次稍后请求此json模式时保留在那里。

您还可以在Loopback Next的Github页面上看到相关问题:

希望他们在某些时候支持这些类型的验证以及Loopback装饰器中的自定义验证器。


1
投票

它应该如下,

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

你可以参考doc here

© www.soinside.com 2019 - 2024. All rights reserved.