使用Joi模式获取具有在模式中指定的字段的json对象

问题描述

我不确定是否曾经问过这种类型的问题,但是我找不到任何与此相关的信息。在我当前的项目中,我们使用Joi模式执行验证。我喜欢定义自定义架构并使用该架构对传入对象运行验证的功能我有一项任务需要过滤对象属性。与_.pick类似,但是属性很复杂,并且处理嵌套的objets和数组。我们已经有一个专为执行验证而设计的joi模式,但我正在考虑使用该模式来获取对象的特定属性,例如使用该模式过滤对象数据。像这样:

const Joi = require('joi');
const val = {
  a: 'test-val1',b: 'test-val2'
}
const schema = Joi.object({
   a: Joi.string()
});
// Now the below result have the object with both `a` and `b`
// properties but I want joi to strip the `b` property from the object
const result = schema.validate(value,{ allowUnkNown: true });

Joi的文档中没有提到这样的内容。我碰到了this(ajv)库,它可以满足我的要求,但是我想确定是否可以使用Joi来实现。预先感谢。

解决方法

Joi提供了stripUnkown属性,该属性只能用于获取架构中定义的字段。