在Node.js RESTapi中验证用户输入似乎非常简单
..。
但问题是,我的应用程序不是用英语编写的。这意味着我需要向前端用户发送一条自定义的书面消息。
我已经在谷歌上搜索过了,只发现了问题。
也许有人能给出一个解决方案?
这是我用来验证
系统:
var schema = Joi.object().keys({
firstName: Joi.string().min(5).max(10).required(),
lastName: Joi.string().min(5).max(10).required()
..
});
Joi.validate(req.body, schema, function(err, value) {
if (err) {
return catched(err.details);
}
});
function catched(reject) {
res.json({
validData: false,
errors: reject
});
}
另外,有没有办法使用
在客户端?
谢谢!
发布于 2018-02-11 04:07:11
我找到的一个解决方案是设置:
var schema = Joi.object().keys({
firstName: Joi.string().min(5).max(10).required().label("Your error message in here"),
lastName: Joi.string().min(5).max(10).required()
..
});
然后打印
从回调
变量
发布于 2019-10-04 18:05:51
原始答案
当前的方法(我个人认为它更好)是使用
(或
)。
const Joi = require('@hapi/joi');
const joiSchema = Joi.object({
a: Joi.string()
.min(2)
.max(10)
.required()
.messages({
'string.base': `"a" should be a type of 'text'`,
'string.empty': `"a" cannot be an empty field`,
'string.min': `"a" should have a minimum length of {#limit}`,
'any.required': `"a" is a required field`
})
});
const validationResult = joiSchema.validate({ a: 2 }, { abortEarly: false });
console.log(validationResult.error); // expecting ValidationError: "a" should be a type of 'text'
使用
是
不推荐
只是为了用自定义消息更新默认消息。
是提供更多选项作为首选项的一种精心设计的方法。首选项的其他选项直接取自
.validate()
进一步阅读:
https://github.com/hapijs/joi/issues/2158
更新1
:我看到上面的解释对一些人不起作用,所以我放了一些代码来测试一下自己。点击此处查看:
https://runkit.com/embed/fnfaq3j0z9l2
我还更新了之前共享的代码片段,以获得从包包含、使用到调用实际验证方法的详细信息。
更新2
:joi错误类型及其描述的列表(对于
-如string.base、array.unique、date.min等。)是可用的
这里
..。
更新3
:Joi有
从hapi项目迁移
要独立执行以下操作:
https://www.npmjs.com/package/joi
..。确保您使用的是最新版本(或至少更高版本的v17)。
发布于 2019-02-13 03:50:25
扩展
Ashish Kadam的回答
,如果您有许多不同的错误类型,您可以检查存在哪种类型的错误,并相应地设置其消息:
Joi v17.4.0
v17.4.0使用
var schema = Joi.object().keys({
firstName: Joi.string().min(5).max(10).required().error(errors => {
errors.forEach(err => {
switch (err.code) {
case "any.empty":
err.message = "Value should not be empty!";
break;
case "string.min":
err.message = `Value should have at least ${err.local.limit} characters!`;
break;
case "string.max":
err.message = `Value should have at most ${err.local.limit} characters!`;
break;
default:
break;
}
});
return errors;
}),
// ...
});
您可以在此处查看错误列表:
Joi 17.4.0 API参考>错误>错误列表
Joi v14.3.1
v14.3.1使用
var schema = Joi.object().keys({
firstName: Joi.string().min(5).max(10).required().error(errors => {
errors.forEach(err => {
switch (err.type) {
case "any.empty":
err.message = "Value should not be empty!";
break;
case "string.min":
err.message = `Value should have at least ${err.context.limit} characters!`;
break;
case "string.max":
err.message = `Value should have at most ${err.context.limit} characters!`;
break;
default:
break;
}
});
return errors;
}),
// ...
});
您可以在此处查看错误列表:
Joi 14.3.1 API参考>错误>错误列表
此外,您还可以查看
有关详细信息,请参阅。引用文档:
如果规则失败,则使用自定义错误覆盖默认的joi错误:
可以是:
的实例
-覆盖错误。
A
,将错误数组作为参数,其中必须:
返回
-用此文本替换错误消息
返回单个
或者是一个
其中:
-提供错误类型的可选参数(例如
)。
-可选参数if
,其中包含错误的文本。
-可选参数if
包含一个模板字符串,使用与通常的joi语言错误相同的格式。
-可选参数,用于在使用
..。
- return an `Error` - same as when you directly provide an `Error`, but you can customize the error message based on the errors.
:
-布尔值,指示错误处理程序应用于所有错误还是仅用于此属性上发生的错误(
值)。这个概念只有在以下情况下才有意义
或者
与其他值一样,模式没有子级。默认为
..。
https://stackoverflow.com/questions/48720942
复制相似问题