You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 09:06:10