如何在JOI 17中添加自定义验证器?

戴夫·斯坦

我在JOI 14上,似乎找不到向17升级的指南。我看到人们对JOI 16发表类似的问题,但最近的更新是3个月前。type根据我在如何在Joi中添加自定义验证器功能中看到的内容,它看起来好像不是16年代必需的

我正在查看https://joi.dev/api/?v=17.3.0#extensions,而对typeis的描述The type of schema. Can be a string, or a regular expression that matches multiple types.

我尝试过这样的事情:

    const snakeAlpha = joi => {
      return {
        type: 'object',
        name: 'snakeAlpha',
        base: joi.string().regex(/^[a-z]+(_[a-z]+)*$/)
      };
    };
    
    const customJoi = Joi.extend({
      type: 'object',
      rules: {
        snakeAlpha
      }
    });

它给了我这个错误:

    ValidationError: {
      "type": "object",
      "rules": {
        "snakeAlpha" [1]: "[joi => {\n  return {\n    type: 'object',\n    name: 'snakeAlpha',\n    base: joi.string().regex(/^[a-z]+(_[a-z]+)*$/)\n  };\n}]"
      }
    }
    
    [1] "rules.snakeAlpha" must be of type object

自从说了以来我很困惑object我也尝试过,string因为这就是基础,但是它有相同的错误消息。

更新我还意识到原始示例仅涵盖了一个不引用joi(正则表达式)的简单规则。我也有引用其他自定义验证器的验证器,如下所示。奖励积分也可以解决这种情况。

const arrayKebabAlpha = joi => {
  return {
    type: 'string',
    name: 'arrayKebabAlpha',
    base: joi.array().items(joi.kebabAlpha())
  };
};
安赫

令人失望的是,Joi扩展的文档没有这么有用的功能。幸运的是,许多Joi的核心都是使用扩展编写的,因此从源代码中可以学到很多

如果我将您的规则写为扩展名,它将像这样:

const customJoi = Joi.extend(joi => ({
    type: 'string',
    base: joi.string(),
    messages: {
        'string.snakeAlpha': '{{#label}} must be snake case'
    },
    rules: {
        snakeAlpha: {
            validate(value, helpers)
            {
                if (!/^[a-z]+(_[a-z]+)*$/.test(value))
                {
                    return helpers.error('string.snakeAlpha', { value });
                }

                return value;
            }
        }
    }
}));

可以这样使用:

customJoi.object().keys({
    foo: customJoi.string().snakeAlpha()
});

更新

我不确定这是否是使用依赖扩展的正确方法,但这是我通常的处理方式...

我首先在数组中定义扩展名,以确保首先定义相关的扩展名。然后,我将使用上一个customJoi实例重新遍历数组,以便下一个扩展包括在其之前定义的扩展。一个简单的工作示例可能会比我能说的要好!

(我还简化了扩展,使其与您习惯的使用方式更加内联)

const Joi = require('joi');

let customJoi = Joi;

const extensions = [
    joi => ({
        type: 'snakeAlpha',
        base: joi.string().regex(/^[a-z]+(_[a-z]+)*$/)
    }),
    // this instance of 'joi' will include 'snakeAlpha'
    joi => ({
        type: 'kebabAlpha',
        base: joi.string().regex(/^[a-z]+(-[a-z]+)*$/)
    }),
    // this instance of 'joi' will include 'snakeAlpha' and 'kebabAlpha'
    joi => ({
        type: 'arrayKebabAlpha',
        base: joi.array().items(joi.kebabAlpha())
    })
];

extensions.forEach(extension =>
    customJoi = customJoi.extend(extension));

customJoi.assert([ 'hello-world' ], customJoi.arrayKebabAlpha());

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何在Joi中添加自定义验证器功能?

来自分类Dev

如何在FormRequest中添加自定义验证器?

来自分类Dev

如何在自定义设置器中添加活动记录验证错误?

来自分类Dev

(Laravel)如何在自定义验证器中添加错误?

来自分类Dev

如何向自定义的验证库添加自定义验证器

来自分类Dev

如何在@ hapi / joi中设置自定义错误消息?

来自分类Dev

如何在扩展(自定义)验证器类中动态更改验证错误消息

来自分类Dev

如何使用自定义消息设置Joi验证?

来自分类Dev

如何在CKAN 2.2中定义自定义验证器

来自分类Dev

如何在hapi.js中实现Joi验证?

来自分类Dev

如何在laravel 5.2中添加自定义验证规则?

来自分类Dev

如何在Yii 2验证错误消息中添加自定义链接?

来自分类Dev

如何在jQuery验证插件的空白/错误字段中添加自定义CSS?

来自分类Dev

如何在 Rails 中为 ActiveRecord 模型添加自定义唯一性验证?

来自分类Dev

如何在 sylius 上自定义密码验证器?

来自分类Dev

如何在Rails 4中添加要设计的自定义字段并自定义注册控制器?

来自分类Dev

如何使用自定义验证器服务器验证列表中的每个条目

来自分类Dev

如何在sklearn中编写自定义估算器并在其上使用交叉验证?

来自分类Dev

如何在Angular2 / 4/5中实现自定义异步验证器

来自分类Dev

如何在KendoGrid /自定义验证器编辑中从Kendo模型访问ID?

来自分类Dev

如何在Symfony的控制器中自定义验证错误消息

来自分类Dev

我如何在adonis /node.js中创建自定义验证器?

来自分类Dev

如何在sklearn中编写自定义估算器并在其上使用交叉验证?

来自分类Dev

如何在Angular2中制作自定义验证器

来自分类Dev

如何在javascript中使用hapijs joi框架验证列表?

来自分类Dev

如何使用自定义远程验证器验证MVC中列表中不同的字段对?

来自分类Dev

在Laravel 5中使用表单请求验证时如何添加自定义验证规则

来自分类Dev

如何在Polymer中的自定义元素属性中添加事件侦听器?

来自分类Dev

如何在Windows Phone 8.1应用中添加自定义时间选择器?

Related 相关文章

  1. 1

    如何在Joi中添加自定义验证器功能?

  2. 2

    如何在FormRequest中添加自定义验证器?

  3. 3

    如何在自定义设置器中添加活动记录验证错误?

  4. 4

    (Laravel)如何在自定义验证器中添加错误?

  5. 5

    如何向自定义的验证库添加自定义验证器

  6. 6

    如何在@ hapi / joi中设置自定义错误消息?

  7. 7

    如何在扩展(自定义)验证器类中动态更改验证错误消息

  8. 8

    如何使用自定义消息设置Joi验证?

  9. 9

    如何在CKAN 2.2中定义自定义验证器

  10. 10

    如何在hapi.js中实现Joi验证?

  11. 11

    如何在laravel 5.2中添加自定义验证规则?

  12. 12

    如何在Yii 2验证错误消息中添加自定义链接?

  13. 13

    如何在jQuery验证插件的空白/错误字段中添加自定义CSS?

  14. 14

    如何在 Rails 中为 ActiveRecord 模型添加自定义唯一性验证?

  15. 15

    如何在 sylius 上自定义密码验证器?

  16. 16

    如何在Rails 4中添加要设计的自定义字段并自定义注册控制器?

  17. 17

    如何使用自定义验证器服务器验证列表中的每个条目

  18. 18

    如何在sklearn中编写自定义估算器并在其上使用交叉验证?

  19. 19

    如何在Angular2 / 4/5中实现自定义异步验证器

  20. 20

    如何在KendoGrid /自定义验证器编辑中从Kendo模型访问ID?

  21. 21

    如何在Symfony的控制器中自定义验证错误消息

  22. 22

    我如何在adonis /node.js中创建自定义验证器?

  23. 23

    如何在sklearn中编写自定义估算器并在其上使用交叉验证?

  24. 24

    如何在Angular2中制作自定义验证器

  25. 25

    如何在javascript中使用hapijs joi框架验证列表?

  26. 26

    如何使用自定义远程验证器验证MVC中列表中不同的字段对?

  27. 27

    在Laravel 5中使用表单请求验证时如何添加自定义验证规则

  28. 28

    如何在Polymer中的自定义元素属性中添加事件侦听器?

  29. 29

    如何在Windows Phone 8.1应用中添加自定义时间选择器?

热门标签

归档