Node实战篇:使用joi来验证数据模型 (十)

纯洁的微笑 2018-05-14 13:45:14 ⋅ 213 阅读



当我们书写路由时,往往需要对用户输入的数据进行验证,来保证用户输入的内容符合要求。 那么是否有个库来帮我们来做这样的事情呢? 接下来就给大家介绍一个库---Joi

Joi文档

我总结了常用的一些方法,给大家分享出来,大家可以自行测试,好用才值得分享

 
  1. // 通用类型登录

  2. let paramSchema = Joi.object().keys({

  3.    // 3 - 30 个 数字、字符

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

  5.    // 3 - 30 位 字母数字组合密码

  6.    password: Joi.string().regex(/^[a-zA-Z0-9]{3,30}$/),

  7.    // string || number 都可以通过

  8.    access_token: [Joi.string(), Joi.number()],

  9.    // 生日限制

  10.    birthyear: Joi.number().integer().min(1900).max(2018),

  11.    // email 限制

  12.    email: Joi.string().email(),

  13.    // URI限制

  14.    website: Joi.string().uri({

  15.        scheme: [

  16.            'git',

  17.            /git\+https?/

  18.        ]

  19.    }),

  20.    // ==== 允许为空/ 否认不允许为空 ====

  21.    search: Joi.string().allow(''),

  22.    // 验证枚举值,如果不传,默认为all

  23.    type: Joi.string().valid('disabled', 'normal', 'all').default('all'),

  24.    // 开始时间 会自动格式化

  25.    startTime: Joi.date().min('1-1-1974').max('now'),

  26.    // 结束时间 必须大于开始时间,小于2100

  27.    endTime: Joi.when(Joi.ref('startTime'), { is: Joi.date().required(), then: Joi.date().max('1-1-2100') }),

  28.    // 页码 限制最小值

  29.    page: Joi.number().integer().min(1).default(1),

  30.    pageSize: Joi.number().integer().default(8),

  31.    //

  32.    deleteWhenLtTen: Joi.number().integer().max(10).strip(),

  33.    // 数组中包含某个字段 && 数字

  34.    arrayString: Joi.array().items(

  35.        // 数组中必须包含 name1

  36.        Joi.string().label('name1').required(),

  37.        // 数组中必须包含 数字

  38.        Joi.number().required(),

  39.        // 数组中可以包含其他类型,如bool, 但是最终结果会==除掉【以上类型的以外字段】

  40.        Joi.any().strip()

  41.    ),

  42.    // 数组对象, 如需其参考以上字段

  43.    arrayObject: Joi.array().items(

  44.        Joi.object().keys({

  45.            age: Joi.number().integer().max(200),

  46.            sex: Joi.boolean()    

  47.        })

  48.    )

  49.    // with 中必须同时存在某些字段,故不可以填写一个参数

  50.    // .without() 同理,不可以一个字段,不能同时存在

  51. }).with("username", "password");

  52. // 测试数据

  53. const testData = {

  54.    Password: "12345678"

  55. }

  56. // 验证

  57. let value = Joi.validate(testData, paramSchema, { allowUnknown: true, abortEarly: true });

  58. console.log(value);

  59. if (value.error) {

  60.    throw error;

  61. }

关注我们

可以关注“IT实战联盟”公众号并留言也可以加入交流群和作者互撩哦~~~


全部评论: 0

    我有话说:

    Node实战:Express--jade模板引擎(七)

    Jade(Pug) — Node Template Engine,一个高性能的模板引擎,专为 Node 而做......

    Node实战:Express-session解析(八)

    Session和HTTP协议属于不同层面的事物,HTTP属于ISO七层模型的最高层应用层,前者Session不属于后者,前者HTTP是具体的动态页面技术实现的,但同时它又是基于后者的。

    Node模块之Events模块(五)

    Node模块之Events模块(五)

    Node实战Nodejs 链接 Mariadb 实例

    MariaDB数据库管理系统是MySQL的一个分支,主要由开源社区在维护,采用GPL授权许可 MariaDB的目的是完全兼容MySQL

    Node 模块之 util URL queryString path(八)

    第一部分 util util是一个Node.js核心模块,util模块设计的主要目的是为了满足Node内部API的需求。其中包括:格式化字符串、对象的序列化、实现对象继承等常用方法。要使用util

    Node实战:Express路由(三)

    Express 是一个基于 Node.js 平台的极简、灵活的 web 应用开发框架,它提供一系列强大的特性,帮助你创建各种 Web 和移动设备应用。

    Node实战:阶段项目(九)

    项目整体预览 项目的github地址 界面逼格还行-_- 主要功能: 登陆; 退出; 所用的主要模块: express, 路由.静态文件.模块分工等; express-session, 采用

    Node实战:Express 中间件-body-parser(五)

    body-parser是什么?body-parser是一个HTTP请求体解析中间件,使用这个模块可以解析JS

    Node.js 实战--微信支付系列(二)

    接上一首先我们看一下整体上微信小程序的开发流程图

    Node模块之fs模块(六)

    屏幕快照 2017-08-08 上午10.53.21.png 第一部分 概述 Node.js 提供一组类似UNIX(POSIX)标准的文件操作API,Node.js中操作文件的模块是fs(File

    架构实战使用MyBatis延迟加载模式数据库减压,附演示实例

    MyBatis中的延迟加载,也称为懒加载,是指在进行关联查询时,按照设置延迟规则推迟对关联对象的select查询。延迟加载可以有效的减少数据库压力......

    2018年8个技巧构建更好的Node.js应用程序

    2018年8个技巧构建更好的Node.js应用程序

    Node实战:Express 中间件 cookie-parser(六)

    cookieParser()实际上是对http传入的cookie进行解析后赋值给req.cookies,使得中间件可用

    Node模块(四)

    模块化分工、各司其职

    使用 NodeJS 实现一个简单区块链

    每天我们都会听说发现新的数字货币的消息,或者有人说它们是一个很快就会爆炸的大泡沫,其中只有区块链会留下。

    架构实战(五):Spring Boot 表单验证和异常处理

    为了让API 能够更好的提供服务,表单数据验证和异常的处理是必不可少的,让我们看看怎么处理......

    微信小程序-template使用实现购物车商品数量加减功能

    上一我们实现了购物车功能,里面有用到template模板功能实现购物车商品数量加减和价格计算功能......

    为什么要使用 Node.js?这几点你必须知道!

    经过这几年的发展,前端普遍进入了技术深水区,只会Web页面开发已经难以满足企业的需求,Node逐渐成为了刚性技能。 但Node在业务上的使用还没有那么普及,有的时候想用老板还不同意,本文将从4个角度

    京东技术:多数据模型数据库 | 应用实例解析

    作 者 简 介吕信,京东商城技术架构部资深架构师,拥有多年数据产品研发及架构经验。