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

如何在Joi对象中自动添加缺失的键并设置默认值?

如何让Joi为缺失的birthday或age字段自动添加"NULL"默认值?

当然可以实现这个需求!你只需要结合Joi的default()方法和类型兼容处理就能轻松搞定,下面是具体的解决方案:

步骤1:调整Schema的类型定义

首先,我们需要让birthday和age字段既支持原本的数据类型(日期/整数),也支持字符串"NULL",这样填充默认值后的数据也能通过验证。可以用Joi.alternatives().try()来组合两种合法类型。

步骤2:为字段设置默认值

使用.default("NULL")指定当字段完全缺失时,自动填充的值为"NULL"。

完整的Joi Schema代码

Joi.object({
  name: Joi.string(),
  language: Joi.string(),
  birthday: Joi.alternatives()
    .try(Joi.date(), Joi.string().valid("NULL"))
    .default("NULL"),
  age: Joi.alternatives()
    .try(Joi.number().integer(), Joi.string().valid("NULL"))
    .default("NULL")
})

验证效果示例

示例1:输入仅包含birthday

// 输入数据
{
  "name": "Jane Doe",
  "language": "de",
  "birthday": "1960-06-27"
}

// 验证后输出的数据
{
  "name": "Jane Doe",
  "language": "de",
  "birthday": "1960-06-27",
  "age": "NULL"
}

示例2:输入仅包含age

// 输入数据
{
  "name": "John Smith",
  "language": "en",
  "age": 30
}

// 验证后输出的数据
{
  "name": "John Smith",
  "language": "en",
  "age": 30,
  "birthday": "NULL"
}

示例3:输入包含两个字段

如果输入同时提供了birthday和age,Joi会保留原始值,不会覆盖:

// 输入数据
{
  "name": "Alice",
  "language": "fr",
  "birthday": "1990-01-15",
  "age": 34
}

// 验证后输出的数据(与输入一致)
{
  "name": "Alice",
  "language": "fr",
  "birthday": "1990-01-15",
  "age": 34
}

额外说明

如果你的场景中需要处理**字段显式设置为undefined**的情况(而不仅仅是完全缺失),可以在default()方法中添加override: true选项:

.default("NULL", { override: true })

这样即使字段被显式设置为undefined,也会被替换为"NULL"。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 17:10:48