美文网首页
node 后端 封装接口参数验证方法Validate

node 后端 封装接口参数验证方法Validate

作者: seaflyj | 来源:发表于2021-09-06 10:15 被阅读0次

    封装node接口参数验证方法

    网上找了一堆参数验证的方法,觉得太啰嗦,索性自己封装了一个

    逻辑不复杂就是接口接受参数,调用验证方法,符合规则的放行,不符合的就把错误信息输出;
    新建until.js,代码如下:

    // 数据验证
    const Validate = async (ctxdata, checkData) => {
      return new Promise((resolve, reject) => {
        let result = [];
        for (let i in checkData) {
          let resli = {
            name: i,
            msg: "",
          };
          let msgli = [];
          for (let k in checkData[i].split("|")) {
            switch (checkData[i].split("|")[k]) {
              case "required": // 指,这个参数是必填
                if (!ctxdata[i]) {
                  resli.state = false;
                  msgli.push("不能为空");
                }
                break;
              case "number": // 指,参数必须是number
                if (!/^[0-9]+.?[0-9]*/.test(ctxdata[i])) {
                  resli.state = false;
                  msgli.push("必须是 number 类型");
                }
                break;
                // 所以接下来,您可以自己添加需要验证的规则,是不是 boolean、string、array等;
              default:
                resli.state = true;
                break;
            }
          }
          resli.msg = `参数 ${i} ${msgli.map((el) => el).join(",")}`;
          // console.log(resli)
          if (resli.state === false) {
            result.push(resli);
          }
        }
        if (result.length > 0) {
          reject(result);
        } else {
          resolve(true);
        }
      });
    };
    
    module.exports = {
      Validate,
    };
    

    调用方法

    const { Validate } = require("../utils/utils.js");
    
    router.post("/build", async (ctx, next) => {
        const req = ctx.request.body;
        // 校验参数
        try {
            await Validate(req, {
                code: "required|number",// 必填,且类型必须是 number
                siteId: "required",// 必填
                deployStatus: "required",// 必填
            });
        } catch (error) {
            // 错误信息会在此返回
            return (ctx.body = {
                code: -10,
                data: error,
            });
        }
        const result = await build(req);
        ctx.body = result;
    });
    

    效果如图


    微信截图_20210906101403.png

    相关文章

      网友评论

          本文标题:node 后端 封装接口参数验证方法Validate

          本文链接:https://www.haomeiwen.com/subject/tbrewltx.html