如何配置Joi不对Schema对象中未定义的字段执行校验?
解决方案
Joi 的对象校验默认禁止传入未在 Schema 中定义的未知字段,你只需要在定义 Schema 时添加 .unknown(true) 配置即可放开该限制:
const schemaInsercao = Joi.object({ nome: Joi.string() .min(3) .max(255) .required() , ativo: Joi.string() .max(1) .required() .valid('S', 'N') , descricao: Joi.string() .max(255) .required() }).unknown(true); // 新增这一行配置
配置说明
.unknown(true)表示允许对象包含未在 Schema 中声明的字段,这类字段不会触发校验规则,会直接保留在校验结果中- 如果你希望所有的 Joi Schema 都默认允许未知字段,可以全局配置默认规则:
// 初始化Joi时配置全局默认规则 const Joi = require('joi').defaults(schema => schema.options({ allowUnknown: true }));
配置完成后你传入带teste字段的请求就不会再触发"teste" is not allowed的报错,已定义的nome、ativo、descricao三个字段仍会按原有规则正常校验。
内容的提问来源于stack exchange,提问作者Ronnei Peterson
相关产品推荐
相关产品推荐

