http.interceptor.js
4.6 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
// 这里的vm,就是我们在vue文件里面的this,所以我们能在这里获取vuex的变量,比如存放在里面的token
// 同时,我们也可以在此使用getApp().globalData,如果你把token放在getApp().globalData的话,也是可以使用的
const install = (Vue, vm) => {
Vue.prototype.$u.http.setConfig({
// 测试环境
// baseUrl: "http://47.110.250.177:8000",
// baseUrl: "https://api.workai.com.cn",
baseUrl: "https://zfb.workai.com.cn",
// 预生产环境 没有端口
// baseUrl: "http://47.110.246.34",
// baseUrl: "https://api-isxpre.workai.com.cn",
// 线上环境
// baseUrl: "https://api-isx.workai.com.cn",
// baseUrl: "https://api.workai.com.cn",
// OSSUrl: "https://oss.workai.com.cn",
// 如果将此值设置为true,拦截回调中将会返回服务端返回的所有数据response,而不是response.data
// 设置为true后,就需要在this.$u.http.interceptor.response进行多一次的判断,请打印查看具体值
loadingText: '努力加载中~',
loadingTime: 800,
originalData: true,
// 设置自定义头部content-type
// header: {
// 'content-type': 'xxx'
// 'Authorization': 'Basic c3R1ZGVudDpFMlFCY3ZvMTFoNHg3U3ZQdWczZWR5WWcydE5hdnY1NAo='
// }
});
// 请求拦截,配置Token等参数
Vue.prototype.$u.http.interceptor.request = (config) => {
// 引用token
// 方式一,存放在vuex的token,假设使用了uView封装的vuex方式
// 见:https://uviewui.com/components/globalVariable.html
// config.header.token = vm.token;
// 方式二,如果没有使用uView封装的vuex方法,那么需要使用$store.state获取
// config.header.Authorization = vm.$store.state.vuex_token;
// 方式三,如果token放在了globalData,通过getApp().globalData获取
// config.header.token = getApp().globalData.username;
// 方式四,如果token放在了Storage本地存储中,拦截是每次请求都执行的
// 所以哪怕您重新登录修改了Storage,下一次的请求将会是最新值
// const token = uni.getStorageSync('token');
// config.header.token = token;
// config.header.Token = 'xxxxxx';
// console.log('123123123',Vue.prototype.$u.http.config)
// 可以对某个url进行特别处理,此url参数为this.$u.get(url)中的url值
if (config.url.indexOf(`/hro/`) != -1) {
let url = config.url;
let pathArr = url.split('/hro/');
if (Vue.prototype.$u.http.config.baseUrl == 'https://zfb.workai.com.cn') {
config.url = 'https://zfb.workai.com.cn/' + pathArr[1];
} else {
config.url = 'https://api.workai.com.cn/' + pathArr[1];
}
config.header.Authorization = vm.$store.state.vuex_token;
} else {
config.header.Authorization = vm.$store.state.vuex_token;
// if (config.url == '/auth/v1/login') config.header.Authorization = "Basic d29ya2FpOjEyMzQ1Ng==";
if ((config.url == '/auth/v1/login') || (config.url.indexOf(`/user/v1/wechat/code`) != -1)) {
config.header.Authorization = "Basic c3R1ZGVudDpFMlFCY3ZvMTFoNHg3U3ZQdWczZWR5WWcydE5hdnY1NAo=";
}
if (config.url.indexOf(`/user/v1/userIdentity/`) != -1) {
config.header.Authorization = "Basic c3R1ZGVudDpFMlFCY3ZvMTFoNHg3U3ZQdWczZWR5WWcydE5hdnY1NAo=";
}
}
config.header['Wx-App-Id'] = vm.$store.state.vuex_appId;
// 最后需要将config进行return
return config;
// 如果return一个false值,则会取消本次请求
// if(config.url == '/user/rest') return false; // 取消某次请求
}
// 响应拦截,判断状态码是否通过
Vue.prototype.$u.http.interceptor.response = (res) => {
if (res.statusCode == 200) {
// res为服务端返回值,可能有code,result等字段
// 这里对res.result进行返回,将会在this.$u.post(url).then(res => {})的then回调中的res的到
// 如果配置了originalData为true,请留意这里的返回值
return res.data;
} else if (res.statusCode == 401) {
console.log('res--', res)
// 假设201为token失效,这里跳转登录
// vm.$u.toast('登录失效,请重新登录!');
uni.$u.vuex('vuex_user', {});
uni.$u.vuex('vuex_tenant', {});
uni.$u.vuex('vuex_token', '');
uni.$u.vuex('vuex_userid', '');
// uni.setStorageSync('lifeData', {});
return false;
} else {
// 如果返回false,则会调用Promise的reject回调,
// 并将进入this.$u.post(url).then().catch(res=>{})的catch回调中,res为服务端的返回值
return res.data;
}
}
}
export default {
install
}