【问题标题】:How to fail Joi validation for empty/whitespace string?如何使空/空白字符串的 Joi 验证失败?
【发布时间】:2021-06-26 07:12:53
【问题描述】:

我想让 Joi 拒绝像 " " 或 " " 这样的字符串,我该如何实现呢?

【问题讨论】:

    标签: node.js express validation joi


    【解决方案1】:

    使用trimmin

    const schema = Joi
      .string()
      .trim()
      .min(1)
      .required();
    

    测试:

    console.log(schema.validate(' ')); // "value" is not allowed to be empty
    console.log(schema.validate('')); // "value" is not allowed to be empty
    console.log(schema.validate('  foo')); // value: 'foo'
    console.log(schema.validate('foo  ')); // value: 'foo'
    

    【讨论】:

      【解决方案2】:

      用例

      有一个验证 csv 文件的案例(通过 Papa Parse),并且要求 Joi 详细地失败 trim() 验证。 trim() 的正常行为是修复空白,这是明智的。

      我们希望通过trim() 验证错误,而不是自动修复

      示例

      默认

      结果:没有详细错误/通过验证/修剪空白
      const schema1 = Joi.object({ username: Joi.string().trim() })
      const hasValidationError1 = schema1.validate({ username: ' aslezak ' })
      
      // hasValidationError1 { value: { username: 'aslezak' } }
      

      覆盖

      结果:显式详细错误/验证失败/需要在 csv 中修复修剪并重新处理
      const schema2 = Joi.object({ username: Joi.string().trim() })
      const hasValidationError2 = schema2.validate(
      { username: ' aslezak ' },
      { abortEarly: false, convert: false, label: ['path', 'key', true] }
      )
      
      // hasValidationError2 = {
      // value: { username: ' aslezak ' },
      // error: { ValidationError: [ `"username" must not have leading or trailing whitespace.` ] },
      // }
      

      在 joi.dev 文档中引用 validate() 方法有助于确定配置选项。

      API 文档

      https://joi.dev/api/?v=17.4.0#anyvalidatevalue-options

      【讨论】:

        【解决方案3】:

        如果你想防止空字符串

        Joi.string().required().min(1)
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2021-05-20
          • 1970-01-01
          • 1970-01-01
          • 2017-01-29
          • 1970-01-01
          • 2022-11-12
          • 2020-04-22
          • 2015-03-17
          相关资源
          最近更新 更多