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

如何配置Joi使其为缺失的键值对自动填充指定默认值?

Joi 自动填充字段默认值实现方案

Joi 原生就支持默认值填充能力,不需要额外引入插件,核心是用.default()方法指定默认值,同时调整字段的校验约束逻辑:

核心注意点

不要给需要自动填充默认值的字段加.required()约束:.required()的校验逻辑是「强制要求输入对象中必须存在对应字段」,只要输入缺字段就会直接抛出校验错误,根本不会走到默认值填充的流程。而.default()本身已经能保证校验通过的输出对象中一定存在该字段,完全可以替代required的存在性保证作用。

具体实现代码

首先修改原有Schema,给field_2加上默认值配置,移除它的.required()标记:

const schema = Joi.object({
  field_1: Joi.string().required(),
  field_2: Joi.string().default("a default value")
})

正常调用validate方法校验输入即可,返回结果中会自动补全缺失的默认字段:

const input = { field_1: "a string" }
const { error, value } = schema.validate(input)

console.log(value)
// 输出结果完全符合预期:
// {
//   field_1: "a string",
//   field_2: "a default value"
// }

扩展用法

  • 如果需要动态生成默认值,可以给.default()传入一个无参函数,函数的返回值会作为填充的默认值,比如填充当前时间戳:Joi.number().default(() => Date.now())
  • 如果需要嵌套对象里的字段补默认值,给对应嵌套字段单独加.default()即可,逻辑和顶层字段完全一致
  • 校验时如果需要过滤输入中不在Schema里定义的多余字段,可以在validate的配置项里加stripUnknown: true,不会影响默认值的正常填充

内容的提问来源于stack exchange,提问作者charnould

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 21:15:37