【问题标题】:Yup: how to get error message after failed cast?是的:投射失败后如何获得错误信息?
【发布时间】:2021-09-14 18:35:12
【问题描述】:

我正在使用yup 进行验证,并且我想尝试这种惊人的cast 方法,但是从文档中不清楚,如果失败,我如何获得错误消息? cast 要么转换并验证并返回结果,要么返回 null 就是这样。这是不可接受的 - 我还需要一条错误消息。同时我不想运行它两次,比如 - 一次用于验证,一次用于强制转换。

【问题讨论】:

    标签: javascript validation casting joi yup


    【解决方案1】:

    强制转换和验证并返回结果或返回 null 就是这样

    cast validate 结果 - 它只是转换它。 validate(Sync)/isValid(Sync) 强制转换然后验证。

    如果您想在强制转换失败的情况下提供有关特定架构的错误消息,请使用typeError

    同时我不想运行它两次,比如 - 一次用于验证,一次用于强制转换。

    正如我所说,验证方法总是在验证之前先运行转换(如果转换失败,则不会运行验证)。如果您想要强制转换和验证功能,那么您只需调用验证方法并返回 cast 结果(如果有效) - 您不需要调用 cast 除非您只想强制转换(不验证)。

    【讨论】:

    • 我的印象是它在内部进行强制转换以进行验证,但最终如果验证通过则返回原始值而不是强制转换。你说它会返回一个铸造的吗?
    • @jayarjo Returns the value (a cast value if isStrict is false) if the value is valid, and returns the errors otherwise. yup readme
    【解决方案2】:

    您可以随时抛出验证错误

    这是我的完整实现:​​

    phone: yup
    .string()
    // .test('is-valid', 'phone.invalid', async (value) => {
    //   if (typeof value === 'string') {
    //     const number = phoneUtil.parseAndKeepRawInput(value, 'TR');
    //     return phoneUtil.isValidNumber(number);
    //   }
    //   return false;
    // })
    .transform((value) => {
      if (typeof value === 'string') {
        const number = phoneUtil.parse(value, 'TR');
        if (phoneUtil.isValidNumber(number)) {
          return phoneUtil.format(number, PhoneNumberFormat.E164);
        }
      }
      throw new ValidationError(
        new ValidationError('phone.invalid', value, 'phone', 'is-valid')
      );
    })
    .required()
    .nullable(false),
    
    • 注释部分是不必要的,并在转换中替换
    • 引发嵌套验证错误的原因完全是因为我的错误解析逻辑。

    【讨论】:

      猜你喜欢
      • 2011-11-07
      • 2010-11-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-09-27
      • 2019-05-03
      • 1970-01-01
      • 2022-01-04
      相关资源
      最近更新 更多