首页 > 解决方案 > 如何在 Joi.errors() 中获取模式中其他 ref 的值?

问题描述

在 Joi 模式中,我想访问该模式中另一个引用的值以在Joi.errors()函数中打印?

我试图登录.error(() => Joi.ref('name')),但它给了我'ref:name'

在下面的示例中,如果数量验证失败,则输出将是“'ref:name' 的文章数量是必需的”。我想要的是输出的实际值article.name

const article = Joi.object({
  name: Joi.string()
    .max(128)
    .required(),
  quantity: Joi.number()
    .integer()
    .positive()
    .required()
    .error(() => `Article quantity for '${Joi.ref('name')}' is required.`),
});

标签: node.jsexpressjoi

解决方案


我认为这Joi不支持这一点,您可以自己提取价值。

function validateInput(input) {
  const article = Joi.object({
    name: Joi.string()
      .max(128)
      .required(),
    quantity: Joi.number()
      .integer()
      .positive()
      .required()
      .error(() => `Article quantity for '${input.name}' is required.`),
  });

  return article.validate(input);
}

但请记住,如果abortEarly选项设置为但未设置falseinput.name错误消息会变得有点难看:

validateInput({}); // "quantity" fails because [Article quantity for 'undefined' is required.]


推荐阅读