如何在Joi中设置校验规则禁止对象存在指定key
你示例中用到的Joi.forbid()本身就是正确的实现方式,你写的代码运行后会直接返回校验错误,提示bar是被禁止的字段。
除此之外还有另外两种常用实现方案,可根据实际场景选择:
方案1:禁止所有未在schema中显式声明的字段
如果你的需求是只允许对象存在你指定的key,其余所有额外key都要禁止,可使用unknown(false)配置:
const data = {foo: 'xyz', bar: '123'}; const schema = Joi.object({ foo: Joi.string() }).unknown(false); const { error } = schema.validate(data) // 校验会报错,提示bar是未声明的不允许字段
方案2:批量指定多个禁止的key
如果需要一次性禁止多个指定key,可直接使用forbiddenKeys方法传入禁止的key数组:
const data = {foo: 'xyz', bar: '123', baz: '456'}; const schema = Joi.object({ foo: Joi.string() }).forbiddenKeys('bar', 'baz'); const { error } = schema.validate(data) // 校验会报错,提示bar、baz是被禁止的字段
不同方案适用场景
- 仅个别字段需要禁止,其余未声明字段允许存在:使用单个key搭配
Joi.forbid()即可 - 仅允许schema中声明的字段存在,其余全部禁止:使用
unknown(false) - 需要批量指定多个禁止的key:使用
forbiddenKeys方法
内容的提问来源于stack exchange,提问作者Eddie Dane
相关产品推荐
相关产品推荐

