UNPKG

2.11 kBJavaScriptView Raw
1import axios from "axios";
2
3class Apis {
4 constructor(serverMap, apiMap) {
5 this.serverMap = serverMap;
6 this.apiMap = apiMap;
7 this.instance = {};
8
9 if (this.validate) {
10 this.format();
11 this.middleware();
12 this.combine();
13 return this.instance;
14 } else {
15 console.error("apis: 参数不合法,请检查你的配置参数");
16 }
17 }
18
19 get validate() {
20 return true;
21 }
22
23 get base() {
24 let base = "";
25
26 for (const key of Object.keys(this.serverMap)) {
27 if (!base) {
28 base = key;
29 }
30
31 if (this.serverMap[key].default) {
32 base = key;
33 }
34 }
35
36 if (!base) {
37 console.error("apis: 找不到默认服务器配置");
38 }
39
40 return base;
41 }
42
43 format() {
44 for (const key of Object.keys(this.apiMap)) {
45 const item = this.apiMap[key];
46
47 if (!item.server) {
48 item.server = this.base;
49 }
50
51 Object.assign(item, this.serverMap[item.server], item);
52 }
53 }
54
55 middleware() {
56 Apis.reqMiddleware.map(function(middleware) {
57 axios.interceptors.request.use(...middleware);
58 });
59
60 Apis.resMiddleware.map(function(middleware) {
61 axios.interceptors.response.use(...middleware);
62 });
63 }
64
65 restful(url, rest) {
66 const regex = /\:[^/]*/g;
67
68 return url.replace(regex, p => {
69 const key = p.slice(1);
70 if (rest[key]) {
71 return rest[key];
72 }
73 return p;
74 });
75 }
76
77 comboo(bf, af) {
78 if (af.rest) {
79 bf.url = this.restful(bf.url, af.rest);
80 }
81
82 return Object.assign({}, bf, af);
83 }
84
85 combine() {
86 for (const key of Object.keys(this.apiMap)) {
87 this.instance[key] = config => {
88 let result = this.apiMap[key];
89 if (config) {
90 result = this.comboo(this.apiMap[key], config);
91 }
92 return axios.request(result);
93 };
94 }
95 this.instance.gRequest = axios.request;
96 }
97}
98
99Apis.reqMiddleware = [];
100Apis.resMiddleware = [];
101
102Apis.useReq = function() {
103 Apis.reqMiddleware.push(arguments);
104};
105Apis.useRes = function() {
106 Apis.resMiddleware.push(arguments);
107};
108
109export default Apis;