在hapi/joi。如何将 2 个不同的模式验证合并为一个?
In hapi/joi. How can I combine 2 different schema validations in one?
这就是我正在做的事情:
import Joi, { AnySchema } from '@hapi/joi';
export const apiExtraInfo = (): AnySchema => {
return Joi.object({
message: Joi.string(),
apiVersion: Joi.string()
});
};
export const normalizeContentSchema = (): AnySchema => {
return Joi.object({
...apiExtraInfo(),
facets: Joi.object(),
count: Joi.number().required(),
content: Joi.array().items(Joi.object()).required()
});
};
架构 apiExtraInfo
将用于许多不同的架构,因此我不想重复自己。
我这样做的方式使我的架构失败。
有什么建议吗?
将 api_schema
和构成 api_schema
的对象(下面定义为 api_schema_definition
)分开。
这是因为 Joi 模式只接受普通对象。
(使用quokka.js测试)
const Joi = require("@hapi/joi");
const test_api_ok = {
message: "hello",
apiVersion: "any",
};
const test_normalize = {
message: "hello",
apiVersion: "any",
facets: {},
count: 1,
content: [{}],
};
const api_schema_definition = () => ({
message: Joi.string(),
apiVersion: Joi.string(),
});
const api_schema = Joi.object({
...api_schema_definition(),
});
const joined_schema = Joi.object({
...api_schema_definition(),
facets: Joi.object(),
count: Joi.number().required(),
content: Joi.array().items(Joi.object()).required(),
});
joined_schema.validate(test_normalize); //?
这就是我正在做的事情:
import Joi, { AnySchema } from '@hapi/joi';
export const apiExtraInfo = (): AnySchema => {
return Joi.object({
message: Joi.string(),
apiVersion: Joi.string()
});
};
export const normalizeContentSchema = (): AnySchema => {
return Joi.object({
...apiExtraInfo(),
facets: Joi.object(),
count: Joi.number().required(),
content: Joi.array().items(Joi.object()).required()
});
};
架构 apiExtraInfo
将用于许多不同的架构,因此我不想重复自己。
我这样做的方式使我的架构失败。
有什么建议吗?
将 api_schema
和构成 api_schema
的对象(下面定义为 api_schema_definition
)分开。
这是因为 Joi 模式只接受普通对象。
(使用quokka.js测试)
const Joi = require("@hapi/joi");
const test_api_ok = {
message: "hello",
apiVersion: "any",
};
const test_normalize = {
message: "hello",
apiVersion: "any",
facets: {},
count: 1,
content: [{}],
};
const api_schema_definition = () => ({
message: Joi.string(),
apiVersion: Joi.string(),
});
const api_schema = Joi.object({
...api_schema_definition(),
});
const joined_schema = Joi.object({
...api_schema_definition(),
facets: Joi.object(),
count: Joi.number().required(),
content: Joi.array().items(Joi.object()).required(),
});
joined_schema.validate(test_normalize); //?