yup验证模式同步与异步验证,并在一个字段中显示多个错误

时间:2020-04-28 11:01:19

标签: javascript yup

我有两个与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。如果以前的同步验证器失败,有什么方法可以停止调用异步test?这也与第一个问题有关,因为如果我只能显示一个错误并且不会在服务器上产生不需要的流量,这没有任何意义。

1 个答案:

答案 0 :(得分:1)

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

中所见

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

关于顺序验证,很遗憾,如项目问题https://github.com/jquense/yup/issues/851

所示,仍不支持此方法