一、作用

定义验证规则

二、下载

npm i @hapi/joi

三、导入

const joi = require("@hapi/joi")

四、定义带有验证规则的对象

// 定义对象的验证规则
const schema = {/* 属性1:验证规则1,属性2:验证规则2,......*/
};//示例:
const schema = {// 该属性的值为字符串类型,长度为2-5之间,不为空,如果不符合规则,则抛出“请输入正确规则的username”的异常username: Joi.string().min(2).max(5).required().error(new Error('请输入正确规则的username')),// 该属性的值为数字类型,值只能为1998-2020之间,如果不符合规则,则抛出“请输入正确规则的birth”的异常birth: Joi.number().min(1998).max(2020).error(new Error('请输入正确规则的birth'))
};

五、API方法介绍

  1. .string():数据必须为字符串类

  2. .number():数据必须为数字类型

  3. .integer():数据必须为整数类型

  4. .alphanum():数据只能包含[a-zA-Z0-9]的字符

  5. .max(number|string):number:最大长度 | string:最大日期

  6. .min(number|string):number:最小长度 | string:最小日期

  7. .required():数据为必填项,不能为null或undefined

  8. .pattern(正则表达式):以正则表达式的形式验证数据

  9. .regex(正则表达式):定义字段必须匹配正则规则。

  10. .email():验证邮箱

  11. .joi.ref(key:string):引言同辈的键值,就是拿到value

  12. .not(values:any[]):当前属性的值不能同参数值相同

  13. .valid(…values:any[]):当前属性的值必须于参数值相同

  14. .dataUri():当前字段为可以是URL地址

  15. .allow(…values:any[]):该字段允许为指定参数的值

  16. .default(any[]):设置该字段的默认值,值可以为string、number、boolean……等

  17. .error(new Error(‘错误信息’)):在不符合验证条件的时候会返回错误信息

    注意:使用规则:先确定类型(string number)string类型的才能使用正则表达式

六、进行数据验证

法一:

// 向外部共享一个接口
// data:要验证的数据对象
module.exports = function(data) {// 通过解构,拿到错误信息字符串error// var {异常字符串,值}= 验证规则对象.validate(要验证的数据);var { error, value } = schema.validate(data);// error :异常字符串,value:值// 如果异常信息字符串不为空,则证明抛出了异常信息if (error) {// 就返回异常信息return error;}// 否则返回空return null;
};

法二:

  1. 通过npm包

    npm i @escook/express-joi
    
  2. 导入包
    const expressJoi =require('@escook/express-joi')
    
  3. 导入定义规则
    const {user_schema_email} =require('../../schema/user')
    //需要在定义规则的时候exports.user_schema_email对象
    
  4. 使用
    router.get('/getAllGoodsCategory',expressJoi(user_schema_email),userGoods_handle.getAllGoodsCategory)
    

七、常用验证规则

7.1修改密码

// 判断的验证规则,新密码不能与旧密码一致
const schemapwd = joi.object({// 旧密码:字符串,最小长度6,最大18,不为空oldpwd: joi.string().min(6).max(18).required().error(new Error("密码为6-18位任意字符!")),// 新密码:不能与旧密码的值相同newpwd: joi.not(joi.ref("oldpwd")).error(new Error("新密码不能和旧密码相同!")),// 重复密码:类型任意,不能为空,校验规则:必须和新密码相同aginpwd: joi.any().required().valid(joi.ref("newpwd")).error(new Error("重复密码和新密码不一致!")),
});

7.2登录验证

const schema = joi.object({// 账号ulogid: joi.string().required().alphanum().min(6).max(11).error(new Error("输入登录账号格式有误!")),// 密码upwd: joi.string().required().min(6).max(18).error(new Error("用户密码为6-18位任意字符"))
});

7.3注册验证

const schema = joi.object({// 用户名uname: joi.string().required().error(new Error("用户名格式有误!")),// 邮箱uemail: joi.string().required().pattern(/^([a-zA-Z]|[0-9])(\w|\-)+@[a-zA-Z0-9]+\.([a-zA-Z]{2,4})$/).error(new Error("邮箱格式有误!")),// 账号ulogid: joi.string().required().alphanum().min(6).max(11).error(new Error("账号格式有误!")),// 密码upwd: joi.string().required().min(6).max(18).error(new Error("用户密码为6-18位任意字符")),
});

7.4 路径/url地址/base64编码

const schemaavatar = joi.object({avatar: joi.string().dataUri().required().error(new Error("请选择图像!"))
});

7.5排序验证

const page = joi.object({sort: joi.string().required().default("asc").allow("asc").allow("desc").error(new Error("排序格式有误!"))
});

node-@hapi/joi校验前端数据相关推荐

  1. 前端 重构时需要注意的事项_前端数据层落地实践

    源宝导读:天际移动平台经过重构改版,近期正式发布了1.0版本,我们在低代码开发方面做了进一步增强.本文主要围绕前端Model.前端业务逻辑(领域模型).数据层与视图层解耦(包装器模式)3个方面,给大家 ...

  2. MongoDB+Node.js+express简单实现数据的提交与回显

    这是一个从前端到后台到数据库都是用js写的小demo,所以我们的口号是:将javascript进行到底 一.项目目录 从图片上也可以看出来,用了一个伪MVC的设计模式,简单来说controllers文 ...

  3. EasyExcel生成带下拉列表或二级级联列表的Excel模版+自定义校验导入数据(附仓库)

    EasyExcel生成带下拉列表或二级级联列表的Excel模版+自定义校验导入数据(附仓库) 目录 EasyExcel生成带下拉列表或二级级联列表的Excel模版+自定义校验导入数据(附仓库) 仓库 ...

  4. 如何启动一个node服务器用来mock数据

    在现如今前后端分离的时代,前后端各自开发,难免有事出现进度不一致的情况,当前端需要数据,而后端还没写出接口的时候,无需等待,只要定义好数据结构,前端就可以启动一个node服务器,自由的玩耍啦. 1,了 ...

  5. boke | 前后端分离中使用JWT保持前端数据的持久化,并自动登录

    在boke后台登录系统中实现了自动登录的功能,这也是前后端分离的开发模式中最常见的一个问题,如何保持登录状态的持久化.今天就来通过实现自动登录来一步步理清前端数据持久化的思路. 一 实现思路 当用户首 ...

  6. 前端数据可视化可绘制地图等插件:Highcharts、Echarts和D3

    前端数据可视化插件有很多,但我用过的只有Highcharts(https://www.hcharts.cn/).Echarts(http://echarts.baidu.com/)和D3(https: ...

  7. element from表单个别select 出现 一开始就校验了数据,且有数据还通不过校验,选中的项叉不掉问题。

    问题1: element from表单个别select 出现 一开始就校验了数据,且有数据还通不过校验. 前提条件: 校验规则都设置正确,都设置prop rules等情况下出现这个问题. 下面是我设置 ...

  8. 【Node】—接收参数 插入数据 实现注册功能

    [Node]-接收参数 插入数据 实现注册功能

  9. @hapi/joi 报错 “message“: “Cannot mix different versions of joi schemas“

    问题: 使用 @hapi/joi 报错 "message": "Cannot mix different versions of joi schemas" np ...

  10. php多条件筛选前台功能,JavaScript前端数据多条件筛选功能实现代码

    有时候也会需要在前端进行数据筛选,增强交互体验.当数据可用的筛选条件较多时,把逻辑写死会给后期维护带来很*烦.下面是我自己写的一个简单的筛选器,筛选条件可以根据数据包含的字段动态设置.本文主要为大家详 ...

最新文章

  1. 扩展资源服务器解决oauth2 性能瓶颈
  2. uc/os-II(source)各种文件含义集锦
  3. 计算天数java_Java,计算两个日期之间的天数
  4. HALCON示例程序obj_diff.hdev算子obj_diff 的使用
  5. 对PostgreSQL xmin的深入学习
  6. Servlet--HttpSession接口,HttpSessionContext接口,Cookie类
  7. vue中使用axios发送请求(二)
  8. nexus配置第三方库文件
  9. 如何压缩jpg图片的大小?
  10. Array和Slices
  11. kubernetes 部署
  12. android高级开发进阶之路
  13. 怎么调大计算机浏览器内字体,浏览器字体大小怎么设置,教你浏览器字体大小怎么设置-win7旗舰版...
  14. 无为才能够无不为-曾仕强
  15. DNS-over-HTTPS 的下一代是 DNS ON BLOCKCHAIN
  16. C++ char*类型的实参与 LPCWSTR类型的形参不兼容
  17. 最老程序员开发实训10--Android---应用介绍页面实现2
  18. 组合数学学习笔记(未完待续
  19. 世界语系谱图【参考】
  20. 移动千牛开放体验治理实践与防治方案

热门文章

  1. pyhton前景之个人愚见
  2. 界面设计中如何增强CTA按钮召唤力?
  3. Consistent hashing kills tencent2012笔试题附加题
  4. drcom for linux,Ubuntu Linux 6.10下用Dr.COM(drcom-client)接入网络的问题
  5. java sort 降序_详解Java sort()数组排序(升序和降序)
  6. EIGamal encryption VS Pairing encryption
  7. python进程间通信之管道通信
  8. MySQL数据库的查询语句的应用
  9. 【Fuzzy】隶属度函数和模糊推理
  10. 计算机各部分名称ppt,PowerPoint软件界面各部分名称(PPT2010/2013/2016)