如何在Joi.errors()中获取架构中其他ref的值?

时间:2019-08-01 13:31:27

标签: node.js express joi

在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.`),
});

1 个答案:

答案 0 :(得分:0)

我认为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选项设置为false而未设置input.name,则错误消息将变得有点难看:

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