UNPKG

gxd-vue-library

Version:

依赖与element Ui插件库,聚福宝福利PC端插件库

87 lines (76 loc) 2.1 kB
'use strict'; //https://www.jianshu.com/p/9b8f2cdfcbe1 //https://segmentfault.com/a/1190000014161454 const {pathToRegexp, match, parse, compile} = require("path-to-regexp"); /** * @description 检查变量类型 * @param obj * @returns {*} */ function check(obj) { let toString = Object.prototype.toString; let map = { '[object Boolean]': 'boolean', '[object Number]': 'number', '[object String]': 'string', '[object Function]': 'function', '[object Array]': 'array', '[object Date]': 'date', '[object RegExp]': 'regExp', '[object Undefined]': 'undefined', '[object Null]': 'null', '[object Object]': 'object', '[object Error]': 'error' }; return map[toString.call(obj)]; } /** * @description 是否有特殊字符 * @param path * @returns {boolean} */ function hasSpecialPlaceholder(path) { return /(:[a-zA-z0-9_]+)/g.test(path) } /** * @description 解析字符操作带有 ":xxx" 的参数,并返回数组 * @param path {String} Api地址 * @returns {[]} */ function parsePathToParams(path){ return parse(path).filter(item=>{ return check(item) === 'object' && item['name']; }).map(item=>{ return item['name'] }) } /** * @description 返回替换后带参数的api地址,并删除替换的参数 * @param path {String} Api地址 * @param params 参数对象 * @returns {{params: *, url: *}} 返回参数的api地址API */ function compilePath(path,params) { let data = JSON.parse(JSON.stringify(params)); let paramsKey = parsePathToParams(path); let compileObj = compile(path); let paramLen = paramsKey.filter(key=>{ return params[key]; }); //传入需要替换参数小于需要替换参数个数报错 if(paramLen.length < paramsKey.length) { throw new Error(JSON.stringify({message: '参数个数错误',source: params, target: paramsKey, path: path})) } let url = compileObj(data); if(paramsKey.length >0) { paramsKey.map(item=>{ delete data[item]; }) } return {url, result: data}; } module.exports = { compilePath, parsePathToParams, check }