1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798 |
- /*
- * @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;
- 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;
|