File tree 3 files changed +130
-0
lines changed
3 files changed +130
-0
lines changed Original file line number Diff line number Diff line change @@ -56,6 +56,10 @@ export default defineConfig({
56
56
text : 'ECMAScript' ,
57
57
link : '/ecmascript/basics/No1' ,
58
58
} ,
59
+ {
60
+ text : 'Axios' ,
61
+ link : '/axios/basics/No1' ,
62
+ } ,
59
63
{
60
64
text : '项目案例' ,
61
65
link : '/case/No1' ,
@@ -304,6 +308,16 @@ export default defineConfig({
304
308
items : [ { text : '1、Array 支持从尾部查找' , link : '/ecmascript/es14/No1' } ] ,
305
309
} ,
306
310
] ,
311
+ '/axios/' :[
312
+ {
313
+ text : '总结' ,
314
+ collapsed : false ,
315
+ items : [
316
+ { text : '1、axios封装' , link : '/axios/basics/No1' } ,
317
+ { text : '2、axios 是否可以取消请求' , link : '/axios/basics/No2' } ,
318
+ ] ,
319
+ } ,
320
+ ] ,
307
321
'/case/' : [
308
322
{ text : '家族图谱' , link : '/case/No1' } ,
309
323
{ text : 'css实现围绕中心进行圆形旋转' , link : '/case/No2' } ,
Original file line number Diff line number Diff line change
1
+ # axios封装
2
+
3
+
4
+ ``` js
5
+ import axios , { InternalAxiosRequestConfig , AxiosResponse } from ' axios' ;
6
+ import { TOKEN_KEY } from ' @/enums/CacheEnum' ;
7
+
8
+ // 创建axios实例
9
+ const service = axios .create ({
10
+ baseURL: import .meta.env.VITE_APP_BASE_API,
11
+ timeout: 60000 ,
12
+ headers: { ' Content-Type' : ' application/json;charset=utf-8' }
13
+ });
14
+
15
+ // 请求拦截器
16
+ service .interceptors .request .use (
17
+ (config : InternalAxiosRequestConfig ) => {
18
+ const accessToken = localStorage .getItem (TOKEN_KEY );
19
+ if (accessToken) {
20
+ config .headers .Authorization = accessToken;
21
+ }
22
+ return config;
23
+ },
24
+ (error : any ) => {
25
+ return Promise .reject (error);
26
+ }
27
+ );
28
+ // 响应拦截器
29
+ service .interceptors .response .use (
30
+ (response : AxiosResponse ) => {
31
+ // 检查配置的响应类型是否为二进制类型('blob' 或 'arraybuffer'), 如果是,直接返回响应对象
32
+ if (response .config .responseType === ' blob' || response .config .responseType === ' arraybuffer' ) {
33
+ return response;
34
+ }
35
+ const { code , data , msg } = response .data ;
36
+ if (code === 200 ) {
37
+ return data;
38
+ }
39
+ ElMessage .error (msg || ' 系统出错' );
40
+ return Promise .reject (new Error (msg || ' Error' ));
41
+ },
42
+ (error : any ) => {
43
+ // 异常处理
44
+ if (error .response .data ) {
45
+ const { code , msg } = error .response .data ;
46
+ if (code === 401 ) {
47
+ ElNotification ({
48
+ title: ' 提示' ,
49
+ message: ' 您的会话已过期,请重新登录' ,
50
+ type: ' info'
51
+ });
52
+ // useUserStoreHook()
53
+ // .resetToken()
54
+ // .then(() => {
55
+ // location.reload();
56
+ // });
57
+ } else {
58
+ ElMessage .error (msg || ' 系统出错' );
59
+ }
60
+ }
61
+ return Promise .reject (error .message );
62
+ }
63
+ );
64
+
65
+ // 对外暴露一个service对象
66
+ export default service ;
67
+
68
+ ```
Original file line number Diff line number Diff line change
1
+ # axios 是否可以取消请求
2
+
3
+ - ** 关键词:** 取消请求
4
+
5
+ > ` Axios ` 可以取消请求。官方文档指出有两种方法可以取消请求,分别是` cancelToken ` 和` AbortController ` ,示例代码如下:
6
+
7
+ - 使用` cancelToken ` 的方法一:
8
+
9
+ ``` js
10
+ const CancelToken = axios .CancelToken ;
11
+ const source = CancelToken .source ();
12
+ axios .post (" /user/12345" , { name: " new name" }, { cancelToken: source .token });
13
+ source .cancel (" Operation canceled by the user." );
14
+ ```
15
+
16
+ - 使用 ` cancelToken ` 的方法二:
17
+
18
+ ``` js
19
+ const CancelToken = axios .CancelToken ;
20
+ let cancel;
21
+ axios .get (" /user/12345" , {
22
+ cancelToken: new CancelToken (function executor (c ) {
23
+ cancel = c;
24
+ }),
25
+ });
26
+ cancel ();
27
+ ```
28
+
29
+ - 使用` AbortController ` :
30
+
31
+ ``` js
32
+ const controller = new AbortController ();
33
+ axios .get (" /foo/bar" , { signal: controller .signal }).then (function (response ) {
34
+ // ...
35
+ });
36
+ controller .abort ();
37
+
38
+ ```
39
+
40
+ > 通过文档描述和示例代码,可以总结出以下功能点:
41
+
42
+ - 支持` cancelToken ` 取消请求,` cancelToken ` 可以通过工厂函数产生,也可以通过构造函数生成;
43
+
44
+ - 支持 ` Fetch API ` 的` AbortController ` 取消请求;
45
+
46
+ - 一个` token/signal ` 可以取消多个请求,一个请求也可同时使用` token/signal ` ;
47
+
48
+ - 如果在开始` axios request ` 之前执行了取消请求,则并不会发出真实的请求。
You can’t perform that action at this time.
0 commit comments