表单数据验证
在用node.js写登录注册接口时,用了一个很方便的表单验证。
1. 安装@hapi/joi包,这是为表单中携带的每个数据项,定义验证规则。
npm install @hapi/joi@17.1.0
2. 安装@escook/express-joi中间件,来实现自动对表单数据进行验证的功能。
npm i @escook/express-joi
3. 部分验证规则
- string()值必须时字符串
- alphanum()值只能是包含a-zA-Z的字符串
- min(len)最小长度
- max(len)最大长度
- required()值必填项,不能为undefined
- pattern(正则表达式)值必须符合正则表达式的规则
4. 用户信息验证规则模块
// 导入验证规则包
const joi = require('@hapi/joi')
// 用户名的验证规则
const username = joi.string().alphanum().min(3).max(12).required()
// 密码的验证规则
const password = joi
.string()
.pattern(/^[\S]{6,8}$/)
.required()
// 注册和登录表单的验证规则对象
exports.schema = {
// 表示需要对 req.body 中的数据进行验证
body: {
username,
password,
},
}
5. 修改路由对应得信息
// 1. 导入验证表单数据的中间件
const expressJoi = require('@escook/express-joi')
// 2. 导入需要的验证规则对象
const {
schema } = require('../schema/user')
router.post('/register', expressJoi(schema), userHandler.register)
验证用户名成功
验证密码成功
6. 捕获数据校验失败
// 导入验证规则包
const joi = require('@hapi/joi')
// 错误中间件
app.use(function (err, req, res, next) {
// 数据验证失败
if (err instanceof joi.ValidationError) return res.send(err)
// 未知错误
res.send(err)
})
例如登录失败
以上就是表单验证的方便方法啦~