拦截器挂载
实际开发时,可以把http请求拦截器放在一个单独文件中,然后在main.js
中引入,挂载到uni.$c.http
上,方便管理维护。
实现
1、新建http.interceptor.js
,内容如下:
js
// http.interceptor.js
function install(app) {
const vm = app.config.globalProperties;
// 在请求之前拦截
vm.$c.http.interceptors.request.use((config) => {
// token可以从状态管理器pina中获取
//if (!token) {
// return Promise.reject(config)
//}
// config.header.Authorization = token;
return config
}, config => {
return Promise.reject('发送请求失败')
})
// 在请求之后拦截
// 使用 uni.$c.setConfig('http',{custom:{disableErrorTips:true}}) 禁止错误提示
vm.$c.http.interceptors.response.use(
// 请求完成
(response) => {
// if (response.data.code !== 200) { // 服务端返回的状态码不等于200,则reject()
// return Promise.reject(response) // return Promise.reject 可使promise状态进入catch
// if (response.config.custom.verification) { // 演示自定义参数的作用
// return response.data
// }
console.log(response)
return response
},
// 错误时,statusCode !== 200
(response) => {
console.log(response)
return Promise.reject(response)
}
)
}
export default install
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
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
2、在main.js
中引入即可
js
// main.js
import App from "./App";
import {createSSRApp} from "vue";
import CookUni from "@/uni_modules/cook-uni";
// 引入拦截器
import HttpInterceptor from "./http.interceptor";
export function createApp() {
const app = createSSRApp(App);
CookUni(app);
// 挂载http拦截器
HttpInterceptor(app);
return {
app,
};
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19