Joi 在值无效时使用默认值

Joi use default when value is invalid

我正在尝试使用 Joi 验证一些数据。但是,我想在提供的值无效时使用默认值。我当前的验证如下所示:

field: Joi.string()
    .optional()
    .valid('a', 'b', 'c', 'd')
    .default('a', { invalid: true }),

因此,当我得到例如 y 时,发生验证错误并且未使用默认值。任何帮助都适用

您可以使用alternatives.try(schemas)通过使用此架构来实现您想要的:

  const schema = Joi.object().keys({
    field:  Joi.alternatives().try([
      Joi.string().valid('a', 'b', 'c', 'd'),
      Joi.empty(Joi.any())
    ]).default('a')
  })

您还可以通过 joi 16.0.0(尚未发布)上的 any.failover(value) 实现此目的。

替代@soltex 回答:

default 仅在未设置该值时有效。所以你可以使用empty来取消设置值。(基本上我就是这样,不知道负分):

const schema = Joi.object().keys({
    field: Joi.string().empty(Joi.not(['a', 'b', 'c', 'd'])).default('a')
})