我在模型中定义的属性如下:
@property({
type: 'string',
required: true,
min: 2,
max: 255
})
name: string
但是,当我发送包含1个字符的字段时,并没有抛出错误。有人可以帮我吗?
答案 0 :(得分:1)
回送4(以及回送3)默认情况下不支持最小/最大属性,因此不会将其用于验证发送到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
方法中,其中我使用标准的jsonSchema
函数(环回的一部分)初始化getJsonSchema
。然后,我使用附加的jsonSchema
和minLength
属性扩展此maxLength
。在getJsonSchema
函数内部,他们使用json模式的缓存,因此在应用程序生命周期内为每个模型只生成一次该模式,以确保我们设置的值在以后每次请求此json模式时都将保留在那里。
您还可以在Loopback Next的Github页面上查看相关问题:
希望它们会在某种程度上支持这些类型的验证以及Loopback装饰器中本地提供的自定义验证器。
答案 1 :(得分:0)
应该如下所示,
@property({
type: 'string',
required: true,
jsonSchema: {
maxLength: 30,
minLength: 10,
},
})
name: string
您可以参考文档here