node-@hapi/joi校验前端数据

7 篇文章 0 订阅

一、作用

定义验证规则

二、下载

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("排序格式有误!"))
});

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
npm WARN deprecated stable@0.1.8: Modern JS already guarantees Array#sort() is a stable sort, so this library is deprecated. See the compatibility table on MDN: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/sort#browser_compatibility npm WARN deprecated source-map-url@0.4.1: See https://github.com/lydell/source-map-url#deprecated npm WARN deprecated @hapi/bourne@1.3.2: This version has been deprecated and is no longer supported or maintained npm WARN deprecated @hapi/topo@3.1.6: This version has been deprecated and is no longer supported or maintained npm WARN deprecated eslint-loader@2.2.1: This loader has been deprecated. Please use eslint-webpack-plugin npm WARN deprecated urix@0.1.0: Please see https://github.com/lydell/urix#deprecated npm WARN deprecated har-validator@5.1.5: this library is no longer supported npm WARN deprecated source-map-resolve@0.5.3: See https://github.com/lydell/source-map-resolve#deprecated npm WARN deprecated chokidar@2.1.8: Chokidar 2 does not receive security updates since 2019. Upgrade to chokidar 3 with 15x fewer dependencies npm WARN deprecated chokidar@2.1.8: Chokidar 2 does not receive security updates since 2019. Upgrade to chokidar 3 with 15x fewer dependencies npm WARN deprecated resolve-url@0.2.1: https://github.com/lydell/resolve-url#deprecated npm WARN deprecated html-webpack-plugin@3.2.0: 3.x is no longer supported npm WARN deprecated @hapi/address@2.1.4: Moved to 'npm install @sideway/address' npm WARN deprecated querystring@0.2.0: The querystring API is considered Legacy. new code should use the URLSearchParams API instead. npm WARN deprecated babel-eslint@10.1.0: babel-eslint is now @babel/eslint-parser. This package will no longer receive updates. npm WARN deprecated uuid@3.4.0: Please upgrade to version 7 or higher. Older versions may use Math.random() in certain circumstances, which is known to be problematic. See https://v8.dev/blog/math-random for details. npm WARN deprecated request@2.88.2: request has been deprecated, see https://github.com/request/request/issues/3142 npm WARN deprecated @hapi/hoek@8.5.1: This version has been deprecated and is no longer supported or maintained npm WARN deprecated @hapi/joi@15.1.1: Switch to 'npm install joi' npm WARN deprecated svgo@1.3.2: This SVGO version is no longer supported. Upgrade to v2.x.x. npm WARN deprecated core-js@2.6.12: core-js@<3.23.3 is no longer maintained and not recommended for usage due to the number of issues. Because of the V8 engine whims, feature detection in old core-js versions could cause a slowdown up to 100x even if nothing is polyfilled. Some versions have web compatibility issues. Please, upgrade your dependencies to the actual version of core-js. added 1400 packages in 1m
06-08

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

懒羊羊h

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值