Joi 验证:单个字段的多个验证错误消息
Joi validations: multiple validation error messages for single field
我正在尝试通过 joi https://www.npmjs.com/package/joi 包实现以下验证流程。
1) 检查字段category
是否存在,如果不存在则显示错误category required
.
2)检查类别字段是否只允许字母如果不显示错误信息provide valid category
这是我的代码
const schema = Joi.object().keys({
category: Joi.string().required().error(new Error('category is required')),
category: Joi.string().regex(/^[a-zA-Z]*$/).required().error(new Error('category is not valid')),
});
但是没有达到预期效果
您实际上可以向 error()
函数提供回调并检查导致错误的原因。
你的回调看起来像:
const onError = x => {
switch (x[0].type) {
case 'any.required': {
return new Error('category is required');
}
case 'string.regex.base': {
return new Error('category is not valid');
}
default: {
return new Error('category has some error');
}
}
};
然后就可以这样使用了:
category: Joi.string()
.regex(/^[a-zA-Z]*$/)
.required()
.error(onError)
这是我使用的完整片段:
const Joi = require('joi');
const onError = x => {
switch (x[0].type) {
case 'any.required': {
return new Error('category is required');
}
case 'string.regex.base': {
return new Error('category is not valid');
}
default: {
return new Error('category has some error');
}
}
};
const schema = Joi.object().keys({
category: Joi.string()
.regex(/^[a-zA-Z]*$/)
.required()
.error(onError)
});
const testCategories = [{ category: 'ABCD' }, {}, { category: '&&&' }];
testCategories.forEach(aCategory => {
schema
.validate(aCategory)
.then(() => {
console.log(JSON.stringify(aCategory), 'passed!');
})
.catch(e => {
console.log(JSON.stringify(aCategory), 'failed', e);
});
});
我正在尝试通过 joi https://www.npmjs.com/package/joi 包实现以下验证流程。
1) 检查字段category
是否存在,如果不存在则显示错误category required
.
2)检查类别字段是否只允许字母如果不显示错误信息provide valid category
这是我的代码
const schema = Joi.object().keys({
category: Joi.string().required().error(new Error('category is required')),
category: Joi.string().regex(/^[a-zA-Z]*$/).required().error(new Error('category is not valid')),
});
但是没有达到预期效果
您实际上可以向 error()
函数提供回调并检查导致错误的原因。
你的回调看起来像:
const onError = x => {
switch (x[0].type) {
case 'any.required': {
return new Error('category is required');
}
case 'string.regex.base': {
return new Error('category is not valid');
}
default: {
return new Error('category has some error');
}
}
};
然后就可以这样使用了:
category: Joi.string()
.regex(/^[a-zA-Z]*$/)
.required()
.error(onError)
这是我使用的完整片段:
const Joi = require('joi');
const onError = x => {
switch (x[0].type) {
case 'any.required': {
return new Error('category is required');
}
case 'string.regex.base': {
return new Error('category is not valid');
}
default: {
return new Error('category has some error');
}
}
};
const schema = Joi.object().keys({
category: Joi.string()
.regex(/^[a-zA-Z]*$/)
.required()
.error(onError)
});
const testCategories = [{ category: 'ABCD' }, {}, { category: '&&&' }];
testCategories.forEach(aCategory => {
schema
.validate(aCategory)
.then(() => {
console.log(JSON.stringify(aCategory), 'passed!');
})
.catch(e => {
console.log(JSON.stringify(aCategory), 'failed', e);
});
});