Javascript 使用Joi验证时剥离未知密钥

Javascript 使用Joi验证时剥离未知密钥,javascript,node.js,joi,Javascript,Node.js,Joi,我正在使用Joi验证服务器中的JavaScript对象。模式如下所示: var schema = Joi.object().keys({ displayName: Joi.string().required(), email: Joi.string().email(), enabled: Joi.boolean().default(false, "Default as disabled") }).unknown(false); 如果对象中存在未知键,上面的模式将报告一个

我正在使用Joi验证服务器中的JavaScript对象。模式如下所示:

var schema = Joi.object().keys({
    displayName: Joi.string().required(),
    email: Joi.string().email(),
    enabled: Joi.boolean().default(false, "Default as disabled")
}).unknown(false);

如果对象中存在未知键,上面的模式将报告一个错误,这是预期的,但我想要的是悄悄地剥离所有未知项,而不发生错误。是否可以执行此操作?

如果要从正在验证的对象中删除未知密钥,则需要使用
stripUnknown
选项


cf options on

以下是包含带未知选项的当前方式:

const validated = customSchema.validate(objForValidation, { stripUnknown: true });

如果您传入一个
objForValidation
,其中包含一个未在
customSchema
中定义的密钥,它将在验证之前删除该条目。

如14.3.4版所示,此问题有一个简单的解决方案。下面是为您解决问题的代码

//用于测试的示例数据。
常量用户={
全名:“贾扬特·马利克”,
电子邮件:“demo@mail.com",
密码:“password111”,
用户名:“你好”,
姓名:“你好”
};
//您可以在这里定义您的模式
const user_schema=joi
.反对({
全名:joi.string().min(4).max(30).trim(),
电子邮件:joi.string().email().required().min(10).max(50).trim(),
密码:joi.string().min(6).max(20),
用户名:joi.string().min(5.max(20.alphanum().trim())
})
.options({stripUnknown:true});
//在这里验证对象。
const result=user\u schema.validate(用户);
//这是从对象修剪未知关键点的最终结果。
log(“带有修剪键的对象:”,result.value);

我看到了这个选项,但在阅读文档时,我觉得它无法满足我的需要。但是在这里测试,它成功了。链接断开了,请看这个答案没有充分解释如何使用
stripUnkwown
选项。
const validated = customSchema.validate(objForValidation, { stripUnknown: true });