joi.label ,这种 joi 模式验证方法有什么作用

juz*_*ode 4 joi

我刚刚遇到了我必须处理的这行代码:

Joi.array().label('Emails').items(Joi.string()).required()

我特别不明白.label('Emails')在做什么,所以,我点击了文档:

覆盖错误消息中的键名称。

name - the name of the key.
Run Code Online (Sandbox Code Playgroud)

const schema = {first_name: Joi.string().label('名字') };

这对我来说特别没有任何意义。因为,是First Name可以Emails传递的特定参数吗?它最重要的是什么?我们还可以传递哪些其他参数等等。这个方法具体是做什么的?

sol*_*tex 6

如果您有以下架构:

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将覆盖messagecontext.label

根据文档,您不能传递任何其他参数。