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

2021-09-06  本文已影响0人  seaflyj

封装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
上一篇 下一篇

猜你喜欢

热点阅读