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

如何调整Joi中store_type字段的验证规则以满足指定需求

Joi store_type字段验证规则修改方案

现有代码

store_type验证逻辑

store_type: Joi.string().valid(...Object.values(storeTypes))
 .error(() => ({
    message: `Store Type must be one of: ${Object.values(storeTypes).join(', ')}`,
 })).default(storeTypes.aaa),

storeTypes枚举定义

storeTypes: {
 aaa: 'AAA',
 bbb: 'BBB'
}

需求说明

  • 未传入store_type值时,自动默认设置为AAA;
  • 传入空字符串或非空字符串时,必须校验是否为AAA或BBB,不符合则抛出指定错误。

修改点及最终代码

现有代码的问题是Joi默认会放行空字符串(不触发valid校验),需要调整让空字符串也参与合法性校验。具体修改如下:

  1. 添加.empty(''):将空字符串标记为“已输入但为空”的有效值,强制进入后续校验流程;
  2. 可选添加.trim():去除字符串首尾空格,避免用户输入带空格的合法值(如' AAA ')被误判为非法。

修改后的完整代码:

store_type: Joi.string()
  .empty('')
  .trim()
  .valid(...Object.values(storeTypes))
  .error(() => ({
    message: `Store Type must be one of: ${Object.values(storeTypes).join(', ')}`,
  }))
  .default(storeTypes.aaa),

效果验证

  • 未传入store_type:触发default规则,自动设置为AAA;
  • 传入空字符串:进入valid校验,因不在合法列表中抛出指定错误;
  • 传入非空字符串:校验是否为AAA/BBB,不符合则报错,符合则通过。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 02:57:35