dengjunjie
5 天以前 4f39dcc195f28fa275fc2d065fbf1bf6a46c21b7
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
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
import { config } from "./config";
 
// let baseUrl = 'http://10.1.105.155:9995'
// let baseUrl = 'http://10.1.211.101:9004'
let baseUrl = '';
// let baseUrl = 'http://192.168.43.71:9995'
// let baseUrl = 'http://47.112.196.253:8881'
 
const install = (Vue, vm) => {
    baseUrl = config.baseUrl;
    // 此为自定义配置参数,具体参数见上方说明
    Vue.prototype.$u.http.setConfig({
        baseUrl: baseUrl,
        loadingText: '努力加载中~',
        loadingTime: 5000,
        originalData: true,
        // ......
    });
 
    // 请求拦截,配置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.token = vm.$store.state.token;
 
        // 方式三,如果token放在了globalData,通过getApp().globalData获取
        // config.header.token = getApp().globalData.username;
 
        // 方式四,如果token放在了Storage本地存储中,拦截是每次请求都执行的
        // 所以哪怕您重新登录修改了Storage,下一次的请求将会是最新值
        // const token = uni.getStorageSync('token');
        // config.header.token = token;
        // debugger
        // var aaa = "Bearer " + uni.getStorageSync('jo_id_token');
        // var bbb = "a" + uni.getStorageSync('remAcc');
        // var ccc =  "a" + uni.getStorageSync('remPwd');
        // var ddd =  "a" + uni.getStorageSync('acc');
        // var eee =  "a" + uni.getStorageSync('pwd');
        config.header.Token = 'xxxxxx';
        config.header.Authorization = "Bearer " + uni.getStorageSync('jo_id_token');
        config.header.uniapp = '1';
        // 可以对某个url进行特别处理,此url参数为this.$u.get(url)中的url值 
        if (config.url == '/api/User/login') config.header.noToken = true;
        // 最后需要将config进行return
        return config;
        // 如果return一个false值,则会取消本次请求
        // if(config.url == '/user/rest') return false; // 取消某次请求
    }
 
    // 响应拦截,判断状态码是否通过
    Vue.prototype.$u.http.interceptor.response = (res) => {
        if(!res.statusCode){
            if (res.errMsg) {
                vm.$u.toast("请求失败,请检查后台程序是否打开,错误信息:" + res.errMsg); 
                return false;
            }
        }
        
        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) {
            // 假设201为token失效,这里跳转登录
            vm.$u.toast('验证失败,请重新登录');
            uni.reLaunch({
                url: '/pages/login/login'
            });
            return false;
        } else if (res.statusCode == 202) {
            // 如果返回false,则会调用Promise的reject回调,
            // 并将进入this.$u.post(url).then().catch(res=>{})的catch回调中,res为服务端的返回值
            vm.$u.post("/api/User/replaceToken").then(res => {
                if (x.data.status) {
                    vm.$u.vuex('vuex_token', x.data.data)
                    vm.$u.route({
                        type: "navigateBack",
                        delta: -1
                    })
                } else {
                    vm.$u.toast('验证过期,请重新登录');
                    uni.reLaunch({
                        url: '/pages/login/login'
                    });
                }
            }).catch(err => {
                uni.reLaunch({
                    url: '/pages/login/login'
                });
            })
            // uni.request({
            //     url: "http://192.168.12.245:8099/api/User/replaceToken",
            //     param: {},
            //     method: 'POST',
            //     responseType: "text",
            //     header: {
            //         Authorization: "Bearer " + vm.vuex_token
            //     },
            //     async: false,
            //     success: function(x) {
            //         if (x.data.status) {
            //             vm.$u.vuex('vuex_token',x.data.data)
            //             vm.$u.route({
            //                 type: "navigateBack",
            //                 delta: -1
            //             })
            //         } else {
            //             console.log(x.data.message);
            //             vm.$u.toast('验证过期,请重新登录');
            //             setTimeout(() => {
            //                 // 此为uView的方法,详见路由相关文档
            //                 vm.$u.route('/pages/user/login')
            //             }, 1500)
            //         }
            //     },
            //     errror: function(ex) {
            //         console.log(ex);
            //         uni.reLaunch({
            //             url: '/pages/user/login'
            //         });
            //     },
            // });
            return false;
        }
    }
}
 
export default {
    install,
    baseUrl
}