表单验证的原则:前端验证为辅,后端验证为主,后端永远不要相信前端提交过来的任何内容
在实际开发中,前后端都需要对表单的数据进行合法性的验证,而且,
后端做为数据合法性验证的最后
一个关口
,在拦截非法数据方面,起到了至关重要的作用。 单纯的使用
if...else...
的形式对数据合法性进行验证,效率低下、出错率高、维护性差。因此, 推荐使用第三方数据验证模块
,来降低出错率、提高验证的效率与可维护性,
让后端程序员把更多的精
力放在核心业务逻辑的处理上
。
1.
安装
@hapi/joi
包,为表单中携带的每个数据项,定义验证规则:
npm
install @hapi/joi@17.1.0
2.
安装
@escook/express
-
joi
中间件,来实现自动对表单数据进行验证的功能:
npm
i @escook/express-joi
3.
新建
/schema/user.js
用户信息验证规则模块,并初始化代码如下:
const
joi
=
require
(
'@hapi/joi'
)
/**
* string()
值必须是字符串
* alphanum()
值只能是包含
a-zA-Z0-9
的字符串
* min(length)
最小长度
* max(length)
最大长度
* required()
值是必填项,不能为
undefined
* pattern(
正则表达式
)
值必须符合正则表达式的规则
*/
//
用户名的验证规则
const
username
=
joi
.
string
().
alphanum
().
min
(
1
).
max
(
10
).
required
()
//
密码的验证规则
const
password
=
joi
.
string
()
.
pattern
(
/^[\S]{6,12}$/
)
.
required
()
//
注册和登录表单的验证规则对象
exports
.
reg_login_schema
=
{
//
表示需要对
req.body
中的数据进行验证
body
: {
username
,
password
,
},
}
4.
修改
/router
// 1.
导入验证表单数据的中间件
const
expressJoi
=
require
(
'@escook/express-joi'
)
// 2.
导入需要的验证规则对象
const
{
reg_login_schema
}
=
require
(
'../schema/user'
)
router
.
post
(
'/reguser'
,
expressJoi
(
reg_login_schema
),
userHandler
.
regUser
)
//
登录
router
.
post
(
'/login'
,
userHandler
.
login
)