【问题标题】:Joi Validation: Is there a way to allow unknown keys for several schema objects in one goJoi 验证:有没有办法一次性允许多个模式对象的未知键
【发布时间】:2021-03-04 19:23:18
【问题描述】:

我有几个包含近百个模式对象的验证器文件。我想同时验证所有这些未知密钥。我已经想出了一种方法来验证我在下面发布的一个对象的未知键。有没有办法一次性完成所有操作?我正在寻找一种 DRY 方法来做到这一点。

const schema = Joi.object().keys({
  a: Joi.string().required(),
  b: Joi.string().required()
}).unknown(true);

// or
const schema = Joi.object().keys({
  a: Joi.string().required(),
  b: Joi.string().required()
}).options({ allowUnknown: true })

【问题讨论】:

  • 但我无法进行 API 调用。我在不使用上述规则的情况下收到此“\"c\" is not allowed”消息。

标签: javascript node.js express joi


【解决方案1】:

您可以使用.defaults 创建您自己的自定义 joi,在这种情况下将 allowUnkown 设置为默认值:

// Create your custom Joi
const customJoi = Joi.defaults((schema) => schema.options({
  allowUnknown: true 
}));

// schema using original Joi
const schema1 = Joi.object().keys({
  a: Joi.string().required(),
  b: Joi.string().required()
})

// schema using custom Joi
const schema2 = customJoi.object().keys({
  a: Joi.string().required(),
  b: Joi.string().required()
})
 
// INVALID, "c" is not allowd
schema1.validate({ a: "a", b: "b", c: 10 })
// VALID
schema2.validate({ a: "a", b: "b", c: 10 })

这也有效:

var Joi = require("joi").defaults((schema) => schema.options({
  allowUnknown: true 
}));

var Joi = require("joi")
Joi = Joi.defaults((schema) => schema.options({
  allowUnknown: true 
}));

【讨论】:

  • 此解决方案与我在问题中发布的解决方案没有什么不同。我仍然需要使用 customJoi 编辑所有模式对象。是否有一个通用设置,我可以设置一次然后忘记?
  • 只要保留当前使用的原始 Joi 名称,您就不需要编辑所有模式。您只需要更新标题即可加载您的自定义 Joi。
猜你喜欢
  • 2017-08-20
  • 2017-06-04
  • 2021-10-10
  • 2021-07-06
  • 1970-01-01
  • 1970-01-01
  • 2019-07-31
  • 2017-08-12
  • 2019-11-08
相关资源
最近更新 更多