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

如何自定义Joi框架中.or()方法的校验错误提示信息?

自定义Joi .or() 方法的错误提示消息

方法一:通过 .messages() 覆盖对应错误码

Joi 的 .or() 规则对应的错误码是 object.or,你可以直接在 schema 中通过 .messages() 方法指定该错误码的自定义提示:

const Joi = require('joi');

const schema = Joi.object({
  optionOne: Joi.string(),
  optionTwo: Joi.string()
}).or('optionOne', 'optionTwo').messages({
  'object.or': 'Please, select one of the options'
});

// 验证测试
const validationResult = schema.validate({});
console.log(validationResult.error?.message); // 输出:Please, select one of the options

之前失败大概率是因为没匹配到正确的错误码,.or() 属于对象级别的规则,对应错误码为 object.or,而非通用错误码。

方法二:使用 .custom() 实现自定义验证逻辑

如果第一种方法仍不生效,可以通过自定义验证函数模拟 .or() 的逻辑,完全自主控制错误提示:

const Joi = require('joi');

const schema = Joi.object({
  optionOne: Joi.string(),
  optionTwo: Joi.string()
}).custom((value, helpers) => {
  // 检查是否至少有一个选项被提供
  if (!value.optionOne && !value.optionTwo) {
    return helpers.error('any.invalid', { message: 'Please, select one of the options' });
  }
  return value;
});

// 验证测试
const validationResult = schema.validate({});
console.log(validationResult.error?.message); // 输出:Please, select one of the options

这种方式绕过了内置的 .or() 规则,直接实现验证逻辑,确保错误提示完全符合需求。

内容的提问来源于stack exchange,提问作者dev-john

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 23:20:27