边写边学系列目录
这个系列文章主旨就是通过写代码来入门,并不深入。只是记录我平时使用到了什么新的技术或插件的入门过程~
express-validator
最近写node端后台写的比较多,慢慢的发现前端呢转node端虽然没有那么难,但是有很多细节的东西还没有掌握,比如以前前后端分离的时候,对于一些需求模糊的表单场景,前端可能约束会很松,大部分的约束都是后端去做的,然后用户提交的信息某个字段不合法也是后端反馈给我们异常,前端再做处理。
因为后端直接接触的就是数据库,每一个字段都必须严格约束,所以对于接口字段的验证,特别是post(往数据库insert)的时候,验证必须严格,我们总不能每一个接口都自己写一套正则来进行校验吧,想一想也是,express庞大的社区肯定已经有类似的中间件了。去npm搜了一下关键字express + validate
。映入眼帘的就是这个 —— express-validator。
// express-validator官网描述是一个基于validator.js封装的express中间件。
express-validator is a set of express.js middlewares that wraps validator.js validator and sanitizer functions.
复制代码
Getting Started
还是沿用第一节的套路,不管你三七二十一,先按照官网示例,跑通一个Demo,然后我在慢慢来弄~ 这里我依然节省时间,直接使用我之前写过的全栈脚手架express-react-scaffold来直接使用express-validator
。
关于这个脚手架的文章在这里新手搭建简洁的Node+React脚手架,正好也是我的第一篇文章,有很多小伙伴也点过赞,一直没时间维护,借此机会温故知新一下,简单回顾了一下,发现当时写的真心锉啊,借此机会小改一下吧~
其实对于后端接口字段校验,首先想到的就是表单提交了,因为对于GET请求,无论是query还是param,大部分校验工作前端来做就已经可以解决问题了,query和param的合法性通过了,一般后端也就不出问题了(当然,并不是说后端就不必校验了)。而post、put等这种涉及到操作数据库的请求,如果字段类型不匹配,就很容易发生未知错误,而且因为表单里不同表单项会有繁琐的校验规则,所以后端必须控制好~
以注册接口为例,跑第一个成功Demo
我们先来看一下以前的注册接口:
前端:
用户名:非空
邮箱:必须是邮箱类型
密码:非空
后端:
用户名:必须大于6位
邮箱:必须是邮箱类型
密码:必须大于6位
复制代码
从上面我们可以看出,前后端约束条件不同,也就是说可能存在前端输入合法而后端输入不合法的场景~
从文档的例子我们可以知道,express-validator的校验只需要在路由path和handler中间插入校验规则数组,我们来写一下。
// 原来的接口
// 用户注册接口
router.post('/register', (req, res) => {
User.findOne({ //查找是否存在
username: req.body.username,
},(err, user)=>{
if (err) {
res.send('server or db error');
} else {
if (user === null) {
const insertObj = {
username: req.body.username,
password: md5(req.body.password + MD5_SUFFIX),
email: req.body.email,
role: 10.0
};
const newUser = new User(insertObj);
newUser.save(insertObj, (err, doc) => {
if (err) {
res.json({ result: false, msg: '用户注册失败' });
}