【问题标题】:How to specify minimum and maximum length for fields in Loopback 4?如何为 Loopback 4 中的字段指定最小和最大长度?
【发布时间】:2019-07-16 20:28:28
【问题描述】:

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

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

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

【问题讨论】:

  • @WiktorStribiżew 谢谢老兄!它得到了一个地狱般的投票,所以我以为我问了一个愚蠢的问题并删除了它。
  • 您只需要了解正则表达式转义是什么。看来您可以使用RegExp('^(([^<>()[\\].,;:\\s@"]+(\\.[^<>()[\\].,;:\\s@"]+)*)|(".+"))@(([^<>()[\\].,;:\\s@"]+\\.)+[^<>()[\\].,;:\\s@"]{2,})$', 'i')。请注意字符串文字周围的单引号(无需单引号转义双引号)和单引号的双反斜杠。我删除了不必要的转义(.[ 内部字符类是文字字符,没有特殊字符)。
  • 哇!非常感谢你。
  • 我将取消删除问题。如果您在此处发布此答案,那就太棒了。也许它会对某些人有所帮助。 stackoverflow.com/questions/54850216/…

标签: javascript loopback


【解决方案1】:

应该像下面这样,

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

您可以参考文档here

【讨论】:

    【解决方案2】:

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

    以下是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 方法中,我使用标准getJsonSchema 函数(环回的一部分)初始化jsonSchema。然后我用额外的minLengthmaxLength 属性扩展这个jsonSchema。在getJsonSchema 函数内部,他们为 json 模式使用缓存,因此在应用程序生命周期中每个模型只生成一次模式,这确保了我们设置的值将在以后每次请求此 json 模式时保留在那里。

    您也可以在 Loopback Next 的 Github 页面查看相关问题:

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

    【讨论】:

    • 谢谢你!你是生命的救星。只有一个问题:您如何实际修改 Loopback 中的错误消息,例如 "{errors:{"email":["Field is invalid"]}"}。问题:stackoverflow.com/questions/54832216/…
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多