【问题标题】:In hapi/joi. How can I combine 2 different schema validations in one?在hapi/joi。如何将 2 个不同的模式验证合二为一?
【发布时间】:2020-08-28 22:03:55
【问题描述】:

这就是我正在做的:

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 将用于许多不同的架构,所以我不想重复自己。

我这样做的方式使我的架构失败。

https://hapi.dev/module/joi/

有什么建议吗?

【问题讨论】:

    标签: javascript typescript ecmascript-6 hapijs joi


    【解决方案1】:

    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); //?
    

    【讨论】:

      猜你喜欢
      • 2018-09-24
      • 2020-09-19
      • 2013-10-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-10-10
      • 2015-10-17
      • 2020-05-30
      相关资源
      最近更新 更多