边写边学系列(二) —— 使用express-validator进行后端校验

边写边学系列目录【一】:使用apidoc,搞定自动化文档【二】:使用express-validator进行后端校验这个系列文章主旨就是通过写代码来入门,并不深入。只是记录我平时使用到了什么新的技术或插件的入门过程~express-validator最近写node端后台写的比较多,慢慢的发现前端呢转node端虽然没有那么难,但是有很多细节的东西还没有掌握,比如以前前后端分离的时候,对于一些...
摘要由CSDN通过智能技术生成

边写边学系列目录

【一】:使用apidoc,搞定自动化文档

【二】:使用express-validator进行后端校验

这个系列文章主旨就是通过写代码来入门,并不深入。只是记录我平时使用到了什么新的技术或插件的入门过程~

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: '用户注册失败' });
                    } 
  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值