如何自定义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
相关产品推荐
相关产品推荐

