【问题标题】:yup Validation Schema Sync vs Async Validation and displaying multiple errors for one field是的验证模式同步与异步验证并显示一个字段的多个错误
【发布时间】:2020-08-12 04:09:09
【问题描述】:

我有两个与 Yup 验证库相关的问题...这些问题相互关联。

第一个问题。

有什么方法可以启用验证,从验证中返回所有错误。看例子:

  const petSchema = yup.string().min( 5 ).oneOf( [ 'cat', 'dog' ] );

  petSchema.validate( 'ox', { abortEarly: false } ).catch( ( e ) => {
    console.log( e );
  } );

我希望我会收到来自minoneOf 的错误消息,但我只收到一个错误:this must be one of the following values: cat, dog。这是一个愚蠢的例子,但我有不同验证规则的密码表单,我想将这些规则全部显示给用户。我想我可以找到它的其他用例...我认为 abortEarly 应该可以工作,但它不能按预期工作。

第二个问题:

假设我有 email 字段,我想在前端使用 string().required().email() 架构检查它,并使用异步自定义 test 方法在后端再检查一次。

问题是当requiredemail 失败时,我的异步test 也会被调用。如果以前的同步验证器失败,有什么办法可以停止调用 async test?这也与第一个问题有关,因为如果我只能显示一个错误并且它在服务器上生成不需要的流量,那么它没有任何意义。

【问题讨论】:

    标签: javascript yup


    【解决方案1】:

    编辑:关于您的验证,在我看来只是 oneOfmin 不兼容,这对我来说很有意义(如果您要检查枚举,为什么要检查长度?)。使用minmax 进行测试,您会从err.inner 得到正确的两个 ValidationError,正如您在StackBlitz project 中看到的那样

    关于多字段验证,在这种情况下仍然有一条消息,但如果您 console.log 错误对象,您将看到一个 errors 属性,这是一个包含所有详细错误的数组。

    关于顺序验证,不幸的是,在项目问题上跟踪这仍然不支持:https://github.com/jquense/yup/issues/851

    【讨论】:

    • 感谢您的输入,但错误对象中的 errors 属性只包含一个错误 - 总是。
    • 我没有答对问题,更新了答案。
    • 看来oneOf与min不兼容。我想知道这是否记录在某处?为什么 oneOf 会覆盖所有其他错误消息?无论如何感谢这个例子!它确实有效,但为什么它不适用于oneOf?还有其他不兼容多错误的验证器吗?
    • 找不到任何关于它的文档,但我认为它与 oneOf 的工作方式密切相关:因为它是白名单值,所以其他检查变得无用
    • 谢谢你的帮助:)
    猜你喜欢
    • 2019-07-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-29
    • 1970-01-01
    • 1970-01-01
    • 2019-04-28
    • 2012-09-25
    相关资源
    最近更新 更多