封装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
网友评论