我刚刚遇到了我必须处理的这行代码:
Joi.array().label('Emails').items(Joi.string()).required()
我特别不明白.label('Emails')在做什么,所以,我点击了文档:
覆盖错误消息中的键名称。
Run Code Online (Sandbox Code Playgroud)name - the name of the key.const schema = {first_name: Joi.string().label('名字') };
这对我来说特别没有任何意义。因为,是First Name可以Emails传递的特定参数吗?它最重要的是什么?我们还可以传递哪些其他参数等等。这个方法具体是做什么的?
如果您有以下架构:
const schema = Joi.object({
first_name: Joi.string().label('First Name')
});
Run Code Online (Sandbox Code Playgroud)
并且验证无效对象(first_name作为number类型传递):
const { error, value } = schema.validate({ first_name: 123 })
Run Code Online (Sandbox Code Playgroud)
该error.details对象如下所示:
[
{
message: 'first_name must be a string',
path: [ 'first_name' ],
type: 'string.base',
context: {
label: 'First Name',
valids: 123,
key: 'first_name'
}
}
]
Run Code Online (Sandbox Code Playgroud)
但是,如果您使用.label('First Name')以下内容,您将从错误对象中得到:
[
{
message: 'First Name must be a string', <-- OVERRIDES
path: [ 'first_name' ],
type: 'string.base',
context: {
label: 'First Name', <-- OVERRIDES
valids: 123,
key: 'first_name'
}
}
]
Run Code Online (Sandbox Code Playgroud)
因此,.label将覆盖message和context.label。
根据文档,您不能传递任何其他参数。