【问题标题】:Joi use default when value is invalid当值无效时,Joi 使用默认值
【发布时间】:2019-12-22 15:47:27
【问题描述】:

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

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

所以当我得到例如 y 时,会发生验证错误并且不使用默认值。任何帮助都会得到帮助

【问题讨论】:

    标签: javascript node.js joi


    【解决方案1】:

    您可以使用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) 实现此目的(尚未发布)。

    【讨论】:

      【解决方案2】:

      替代@soltex 答案:

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-06-15
        • 2018-02-20
        • 2021-08-17
        • 2018-01-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多