Javascript 是否有JS智能json模式验证器,比如Joi,但有动态自定义错误?
我想轻松验证用户的输入 例如,当我询问用户的名字时,可能需要大量的代码才能使其真正有效 我想要在前端和后端都可以使用的东西,而无需更改验证结构 我需要抛出自定义详细错误的能力,类似于:Javascript 是否有JS智能json模式验证器,比如Joi,但有动态自定义错误?,javascript,node.js,validation,schema,joi,Javascript,Node.js,Validation,Schema,Joi,我想轻松验证用户的输入 例如,当我询问用户的名字时,可能需要大量的代码才能使其真正有效 我想要在前端和后端都可以使用的东西,而无需更改验证结构 我需要抛出自定义详细错误的能力,类似于: let schema = Joi.object.keys({ first_name: Joi.string("Required to be a string") .noNumbers("Should not contain numbers") .minlenth(2, "At least 2 char
let schema = Joi.object.keys({
first_name: Joi.string("Required to be a string")
.noNumbers("Should not contain numbers")
.minlenth(2, "At least 2 chars")
.maxlength(10, "Maximum 10 chars")
.required("Required field"),
last_name: Joi.string("Required to be a string")
.noNumbers("Should not contain numbers")
.minlenth(2, "At least 2 chars")
.maxlength(10, "Maximum 10 chars")
.required("Required field"),
});
不幸的是,上述方法不起作用——因为Joi不是这样工作的
也许有一个好的JSON模式验证器可以轻松有效地验证用户的输入,而不浪费时间,同时让用户清楚地看到它?您可以使用JOI。在以下示例中,我将直接覆盖错误:
return Joi.object()
.keys({
str: Joi.string()
.min(2)
.max(10)
.required()
.error(errors => errors.map((err) => {
const customMessage = ({
'string.min': 'override min',
'string.max': 'override max',
})[err.type];
if (customMessage) err.message = customMessage;
return err;
})),
});
我建议您使用函数,因为所有请求的错误消息都是相同的:
function customErrors(errors) {
return errors.map((err) => {
const customMessage = ({
'string.min': 'override min',
'string.max': 'override max',
})[err.type];
if (customMessage) err.message = customMessage;
return err;
});
}
return Joi.object()
.keys({
str: Joi.string()
.min(2)
.max(10)
.required()
.error(customErrors),
});
编辑:
// This
const customMessage = ({
'string.min': 'override min',
'string.max': 'override max',
})[err.type];
if (customMessage) err.message = customMessage;
// Equals this
let customMessage = false;
if (err.type === 'string.min') customMessage = 'override min';
if (err.type === 'string.max') customMessage = 'override max';
if (customMessage) err.message = customMessage;
// Equals this
if (err.type === 'string.min') err.message = 'override min';
if (err.type === 'string.max') err.message = 'override max';
到目前为止,这是一个非常棒的答案。我会试试,让你知道。在哪里可以找到
上下文
键的完整参考?我所有的文档都是customMessage
变量使用ES6功能实现简单快速的if语句
replacer?如果那么-它是如何命名的?