如何调整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校验),需要调整让空字符串也参与合法性校验。具体修改如下:
- 添加
.empty(''):将空字符串标记为“已输入但为空”的有效值,强制进入后续校验流程; - 可选添加
.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
相关产品推荐
相关产品推荐

