joi, 对象架构验证

作者:无名 - GitHub -

  • 源代码名称:joi
  • 源代码网址:http://www.github.com/hapijs/joi
  • joi源代码文档
  • joi源代码下载
  • git url:
    git://www.github.com/hapijs/joi.git
  • git clone代码到本地:
    git clone http://www.github.com/hapijs/joi
  • subversion代码到本地:
    $ svn co --depth empty http://www.github.com/hapijs/joi

    checked out revision 1.

    $ cd repo

    $ svn up trunk

  • javascript对象的对象模式描述语言和验证器。

    领导维护者: morel。

    简介

    想象一下你运行 facebook,希望访问者在网站上登录真名,而不是在第一个名字字段中的l337_p@nda。 如何定义可以输入的限制,并根据集规则验证它。

    joi连接,连接允许你创建 blueprints blueprints或者模式用于javascript对象的( 存储信息的对象),以确保对关键信息的有效 validation。

    api

    参见详细的 api参考代码。

    示例
    constjoi=require('joi');constschema=joi.object().keys({

    username:joi.string().alphanum().min(3).max(30).required(),

    password:joi.string().regex(/^[a-za-z0-9]{3,30}$/),

    access_token: [joi.string(), joi.number()],

    birthyear:joi.number().integer().min(1900).max(2013),

    email:joi.string().email()

    }).with('username', 'birthyear').without('password', 'access_token');// return result.constresult=joi.validate({ username:'abc', birthyear:1994 }, schema);// result.error === null -gt; valid// you can also pass a callback which will be called synchronously with the validation result.joi.validate({ username:'abc', birthyear:1994 }, schema, function (err, value) { }); // err === null -gt; valid

    上面 架构定义了以下约束:

    • username
      • 必需的字符串
      • 只能包含字母数字字符
      • 至少 3个字符,但不超过 30个字符
      • 必须带有 birthyear
    • password
      • 可选字符串
      • 必须满足自定义 正规表达式
      • 不能与 access_token 一起出现
    • access_token
      • 一个可选的,无限制的字符串或者数字
    • birthyear
      • 一个介于 1900和 2013之间的整数
    • email
      • 有效的电子邮件地址字符串
    用法

    使用是两个步骤过程。 首先,使用提供的类型和约束构造架构:

    constschema= {

    a:joi.string()

    };

    注意, joi模式对象是不可变的,这意味着添加了所有附加规则(。.min(5) ) 将返回一个新的架构对象。

    然后,根据架构验证该值:

    const {error, value} =joi.validate({ a:'a string' }, schema);// orjoi.validate({ a:'a string' }, schema, function (err, value) { });

    如果输入有效,则错误将为 null,否则将为错误对象。

    模式可以是普通的javascript对象,其中每个键都分配一个联接类型,也可以是直接连接的类型:

    constschema=joi.string().min(10);

    如果架构是联接类型,则可以直接在类型上调用 schema.validate(value, callback)。 当传递非类型架构对象时,模块内部将它的转换为等效于以下类型的object() 类型:

    constschema=joi.object().keys({

    a:joi.string()

    });

    验证架构时:

    • 默认情况下,( 或者用于对象的键) 是可选的。

      joi.validate(undefined, joi.string()); // validates fine

      若要禁止这里行为,可以将架构设置为 required(),或者在传递 options 时将 presence 设置为 "required":

      joi.validate(undefined, joi.string().required());// orjoi.validate(undefined, joi.string(), /* options */ { presence:"required" });
    • 字符串默认为 utf-8 编码。

    • 规则是以附加方式定义的,并在白名单和黑名单检查之后按顺序进行评估。

    浏览器

    join不直接支持浏览器,但你可以使用加入 es5 build joi在浏览器中工作,或者作为你自己构建的灵感源。



    文章标签:对象schema

    这篇内容就是由IT人知识库 小编为各位整理 原文链接:http://www.itpeo.net/389612/4640054.html





    wPaint, jQuery绘图插件

    源代码名称:wpaint源代码网址:http://www.github.com/websanova/wpaintwpai ...

    php7mar, PHP 7迁移助理报告( MAR )

    源代码名称:php7mar源代码网址:http://www.github.com/alexia/php7marphp7m ...

    rfedfre

    icons, 材质设计启发产品图标

    源代码名称:icons源代码网址:http://www.github.com/materialos/iconsicons ...

    WebODF, WebODF JavaScript文档引擎

    源代码名称:webodf源代码网址:http://www.github.com/kogmbh/webodfwebodf源 ...

    stackoverflow-py-top-qa, stackoverflow上Python相关回答整理翻译

    源代码名称:stackoverflow-py-top-qa源代码网址:http://www.github.com/wkl ...

    robdns, 基于C10M原理的快速DNS服务器

    源代码名称:robdns源代码网址:http://www.github.com/robertdavidgraham/ro ...

    jquery.applink, 从移动和桌面设备的网页链接启动本机应用程序

    源代码名称:jquery.applink源代码网址:http://www.github.com/eusonlito/jq ...

    github-forms, 将标准HTML表单数据提交到GitHub托管的CSV的rest式 API

    源代码名称:github-forms源代码网址:http://www.github.com/benbalter/gith ...

    rfedfre

    QuickDialog, iOS的QuickDialog快速和轻松对话框屏幕

    源代码名称:quickdialog源代码网址:http://www.github.com/escoz/quickdial ...

    RTutor, 用学生解决方案自动assement创建 R 练习

    源代码名称:rtutor源代码网址:http://www.github.com/skranz/rtutorrtutor源 ...

    ftp-deployment, 用于将web应用程序自动部署到FTP服务器的工具

    源代码名称:ftp-deployment源代码网址:http://www.github.com/dg/ftp-deplo ...

    yeoman-wordpress, Wordpress项目的文书生成器

    源代码名称:yeoman-wordpress源代码网址:http://www.github.com/romainberg ...

    jsgamewiki, 一个带有javascript游戏的好链接的Collection

    源代码名称:jsgamewiki源代码网址:http://www.github.com/daraff/jsgamewik ...

    Gravity-Forms-ACF-Field, 高级自定义字段自定义字段可以选择一个或者多个重力窗体

    源代码名称:gravity-forms-acf-field源代码网址:http://www.github.com/sto ...

    mocha-phantomjs, 在 命令行 通过phantomjs中,运行客户端 mocha 测试

    源代码名称:mocha-phantomjs源代码网址:http://www.github.com/nathanbokta ...

    Responsive-Measure, 响应度量值

    源代码名称:responsive-measure源代码网址:http://www.github.com/jbrewer/ ...

    springy, 在JavaScript中,力定向图布局算法

    源代码名称:springy源代码网址:http://www.github.com/dhotson/springyspri ...

    crate, 打嗝的ClojureScript实现

    源代码名称:crate源代码网址:http://www.github.com/ibdknox/cratecrate源代码 ...

    SpotifyControl, 通过 OS X 终端控制 Spotify

    源代码名称:spotifycontrol源代码网址:http://www.github.com/dronir/spoti ...

    node-reggie, 一种实验轻重替代全吹调制度

    源代码名称:node-reggie源代码网址:http://www.github.com/mbrevoort/node- ...