123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113 |
- /*
- * @Description: 参数验证中间件
- * @Autor: kindring
- * @Date: 2022-01-24 11:02:16
- * @LastEditors: kindring
- * @LastEditTime: 2022-02-14 17:23:30
- * @LastDescript:
- */
- // 日志文件
- const log = require('../logger').logger('paramsMid', 'info');
- // 返回值列表
- const rcodeMap = require('../maps/rcodeMap');
- // 错误代码
- const failedRcode = rcodeMap.notParam;
- // 是否为必须 required
- // let optionsTemplate = {
- // body: {
- // owner: {
- // required: true,
- // default: 'admin'
- // }, //检查条件
- // passwd: {
- // required: true
- // },
- // },
- // get: {
- // }
- // }
- function paramsCheck(ruleParams) {
- // 确定该接口需要检查什么参数
- // 检查数据是否存在
- return function(req, res, next) {
- if (!ruleParams) {
- return next();
- }
- // 查询是否通过检测
- let isPass;
- if (ruleParams.get) {
- isPass = checkUrlParams('get', ruleParams.get, req.query);
- }
- if (ruleParams.post) {
- isPass = checkUrlParams('post', ruleParams.post, req.body);
- }
- if (!isPass.pass) {
- log.warn(isPass.msg);
- res.json({
- rcode: failedRcode,
- msg: isPass.msg
- });
- return;
- }
- next();
- }
- }
- /**
- * 判断参数为空
- * @param {*} s 要判断的参数
- */
- function isEmpty(s) {
- if (s == undefined || s === '') {
- return true
- }
- return false
- }
- /**
- * 参数检查
- * @param {*} rule
- * @param {*} params
- */
- function checkUrlParams(type = 'get', rules, params) {
- let paramFields = Object.keys(rules);
- //查看规则
- for (let i = 0; i < paramFields.length; i++) {
- let field = paramFields[i];
- let rule = rules[field];
- // 是否匹配类型
- let isTypeEnum = false;
- // 1. 检查必填参数是否输入
- if (rule.required && isEmpty(params[field])) {
- return { pass: false, msg: `${type} param ${field} required`, matchRule: rule }
- }
- // 2. 查看参数类型是否符合可选类型
- if (rule.types && rule.types.length) {
- // 只需要满足一个
- for (let i = 0; i < rule.types.length; i++) {
- if (typeof params[field] == rule.types[i]) {
- isTypeEnum = true;
- }
- }
- // 查看该值是否为空
- if (!isTypeEnum) {
- return { pass: false, msg: `${type} param ${field} Type Error need ${rule.types.join('|')} but ${typeof params[field]}`, matchRule: rule }
- }
- }
- // 3. 查看参数是否为空,为空则自动修改为默认值
- if (rule.default && params[field] === undefined) {
- console.log(`设置默认值字段:${field},值${rule.default}`);
- params[field] = rule.default;
- }
- }
- return { pass: true };
- }
- module.exports = paramsCheck;
|