如何在 Loopback 4 中指定字段的最小和最大长度?
How to specify minimum and maximum length for fields in Loopback 4?
我在我的模型中定义了 属性 如下:
@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的声明:
The data from request body is validated against its OpenAPI schema specification. We use AJV module to perform the validation, which validates data with a JSON schema generated from the OpenAPI schema specification.
从Open API V3 documentation我们可以看到它们支持string
数据类型和
String length can be restricted using minLength and maxLength:
AJV support minLength and maxLength properties too,但出于某种原因,Loopback 4 还没有一种简单的内置方法来使用 @属性 装饰器定义这些属性。
无论如何,我找到了一个您现在可以使用的解决方法:
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
。然后我用额外的 minLength
和 maxLength
属性扩展这个 jsonSchema
。在 getJsonSchema
函数内部,他们为 json 模式使用缓存,因此在应用程序生命周期期间,每个模型只生成一次模式,确保每次 [=53] 时我们设置的值都会保留在那里=] 稍后请求模式。
您还可以在 Loopback Next 的 Github 页面上查看相关问题:
希望他们能在某个时候在 Loopback 装饰器中原生支持这些类型的验证以及自定义验证器。
应该像下面这样,
@property({
type: 'string',
required: true,
jsonSchema: {
maxLength: 30,
minLength: 10,
},
})
name: string
您可以参考文档 here
我在我的模型中定义了 属性 如下:
@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的声明:
The data from request body is validated against its OpenAPI schema specification. We use AJV module to perform the validation, which validates data with a JSON schema generated from the OpenAPI schema specification.
从Open API V3 documentation我们可以看到它们支持string
数据类型和
String length can be restricted using minLength and maxLength:
AJV support minLength and maxLength properties too,但出于某种原因,Loopback 4 还没有一种简单的内置方法来使用 @属性 装饰器定义这些属性。
无论如何,我找到了一个您现在可以使用的解决方法:
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
。然后我用额外的 minLength
和 maxLength
属性扩展这个 jsonSchema
。在 getJsonSchema
函数内部,他们为 json 模式使用缓存,因此在应用程序生命周期期间,每个模型只生成一次模式,确保每次 [=53] 时我们设置的值都会保留在那里=] 稍后请求模式。
您还可以在 Loopback Next 的 Github 页面上查看相关问题:
希望他们能在某个时候在 Loopback 装饰器中原生支持这些类型的验证以及自定义验证器。
应该像下面这样,
@property({
type: 'string',
required: true,
jsonSchema: {
maxLength: 30,
minLength: 10,
},
})
name: string
您可以参考文档 here