node.js 使用hapi/joi和@escook/express-joi进行规则校验

1.安装,在使用之前需要下载对应的包

npm i @hapi/joi
npm i @escook/express-joi

上面的代码也可以简写成这样避免代码重复,同时安装多个包

npm i @hapi/joi @escook/express-joi

 上面的@是包自带的,一般在包名的后面使用“@版本号”来为所下载的包指定版本号。

2.安装好对应的包之后需要建立一个校验规则的文件夹,文件夹中存放对应路由的校验规则,下面的图片中的分别是文章分类和用户的校验规则文件。

3.在校验规则文件中使用@hapi/joi包定义校验规则,并共享校验规则对象,这样在其他文件中只要导入该文件就可以使用向外暴露的对象。

//导入定义验证规则的的包
const joi = require('@hapi/joi')
//定义账号和密码的验证规则
    const username = joi.string().alphanum().min(1).max(10).required()
    const password = joi.string().pattern(/^[\s]{6,12}$/).required()
//注册登录验证规则的对象
exports.reg_login_schema = {
    body:{
        username,
        password
    }
}

joi中方法的意思:

string()满足字符串

alphanum() 满足a-zA-Z0-9

min()  最小值

max()  最大值

required()  必选项

pattern()正则表达式

email()  邮件格式

number() 数字

integer()  整数

 

 4.在需要使用该规则的路由文件中使用require导入对应的规则文件

//导入验证表单数据的中间件
const expressJoi = require('@escook/express-joi')
//导入验证规则对象
const {reg_login_schema} = require('../schema/user')

在这里引入验证规则的时候使用到了解构赋值的方法,即只获取了文件向外暴露的reg_login_schema 而不导入其他的,因为不需要导入全部文件,所以这样可以提高文件加载的效率。

5.导入规则文件之后在需要使用规则的定义路由处使用expressJoi模块将规则包裹并放在路由映射和路由处理函数的中间,多个处理规则可以用逗号隔开。

router.post('/regUser',expressJoi(reg_login_schema),userHandler.regUser)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 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
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值