• 全栈项目|小书架|服务器开发-Koa2 参数校验处理


    为什么需要做参数校验

    在开发中,无论是App开发还是服务器接口开发, 我们无法去预测用户传入的数据,因此参数(数据)校验是开发中不可或缺的一环。

    例如像App的注册登录表单提交页面,就要做好多层的判断。如:用户名是否为空,用户密码是否为空,密码长度是否足够等等

    那么有没有比较优雅的方式实现呢?

    如何优雅实现

    这里使用的是基于validator.js封装的Lin-Validator,源码是七月老师提供。

    Lin-Validator拥有的功能:

    • 参数校验,header,query,path,body中的所有参数校验

    参数校验

    验证器声明:

    const { LinValidator, Rule } = require('lin-mizar');
    /**
     * 正整数 参数校验
     */
    class PositiveIntegerValidator extends LinValidator {
        constructor() {
            // 使用 this 一定要使用 super
            super()
            // 数组,且关系,也就是数组中所有都满足才能通过
            this.id = [
                new Rule('isInt', '需要是正整数', {
                    min: 1
                }),
            ]
        }
    }
    
    /**
     * 更新用户信息
     */
    class UpdateInfoValidator extends LinValidator {
      constructor () {
        super();
        this.email = [
          new Rule('isOptional'),
          new Rule('isEmail', '电子邮箱不符合规范,请输入正确的邮箱')
        ];
        this.nickname = [
          new Rule('isOptional'),
          new Rule('isLength', '昵称长度必须在2~10之间', 2, 10)
        ]
      }
    }
    module.exports = {
      PositiveIntegerValidator,
      UpdateInfoValidator
    };
    

    自定义别名使用

    // 获取书籍的喜欢状态
    router.get('/like', new Auth().m, async ctx => {
    	// 接口中传递的参数是`bkid`,为了复用 PositiveIntegerValidator 对 id 的校验
    	// 这里使用了自定义别名 id: 'bkid' 来完成验证器的调用
        const v =await new PositiveIntegerValidator().validate(ctx, {
            id: 'bkid'
        })
        const like = await Like.userLikeIt(
            ctx.auth.uid, v.get('query.bkid'))
        ctx.body = like
    })
    

    详细使用

    可通过npm安装使用lin-mizar

    package.json中添加lin-mizar的初始化即可:

    "dependencies": {
        "lin-mizar": "^0.2.1"
      }
    

    在要使用校验器的文件引入

    const { Rule, LinValidator, isNotEmpty } = require('lin-mizar');
    

    详细使用参考:TaleLin/lin-cms-koa中的/app/validators/】,方便的话顺手点个star支持一波。


    咨询请加微信:轻撩即可。
    在这里插入图片描述

  • 相关阅读:
    metadata的使用以及简单的orm模式
    python的cache修饰器
    聊天服务的设计随想
    cherrypy入门
    用python做分布式定时器
    cherrypy & gevent patch
    Python Tornado简单的http request
    连接池的一些感悟
    企业系统架构评估标准
    Nginx与python web服务配置(Uwsgi& FastCGI)
  • 原文地址:https://www.cnblogs.com/gdragon/p/11829656.html
Copyright © 2020-2023  润新知