分享一个自己封装的 axios 网络请求
主要的功能及其优点:
将所有的接口放在一个文件夹中管理(api.js)。并且可以支持动态接口,就是 api.js 文件中定义的接口可以使用 :xx
占位,根据需要动态的改变。动态接口用法模仿的是vue的动态路由,如果你不熟悉动态路由可以看看我的这篇文章:Vue路由传参详解(params 与 query)
1.封装请求:
-
首先在 src 目录下创建 http 目录。继续在 http 目录中创建 api.js 文件与 index.js 文件。
-
然后再 main.js 文件中导入 http 目录下的 index.js 文件。将请求注册为全局组件。
-
将下面封装所需代码代码粘到对应的文件夹
2.基本使用:
getUsers() { const { data } = await this.$http({ url: 'users' }) },
3.动态接口的使用:
deleteUser() { const { data } = await this.$http({ method: 'delete', url: { name: 'usersEdit', params: { id: userinfo.id, }, }, }) },
-
1
-
2
-
3
-
4
-
5
-
6
-
7
-
8
-
9
-
10
-
11
-
12
-
13
-
14
-
15
-
16
4.不足:
封装的请求只能这样使用 this.$http()
。不能 this.$http.get()
或 this.$http.delete()
由于我感觉使用 this.$http()
这种就够了,所以没做其他的封装处理
如果你有更好的想法可以随时联系我
如下是封装所需代码:
const API = { baseURL: 'http://127.0.0.1:8888/api/private/v1/', users: '/users', usersEdit: '/users/:id', } export default API
-
1
-
2
-
3
-
4
-
5
-
6
-
7
-
8
-
9
-
10
-
11
-
12
import axios from 'axios' import API from './api.js' const instance = axios.create({ baseURL: API.baseURL, timeout: '8000', method: 'GET' }) instance.interceptors.request.use( config => { console.log('正在请求...') config.headers.Authorization = sessionStorage.getItem('token') return config }, err => { console.log('请求失败', err) } ) instance.interceptors.response.use( res => { console.log('响应成功') return res }, err => { console.log('响应失败', err) } ) export default function(options = {}) { return instance({ method: options.method, url: (function() { const URL = options.url if (typeof URL === 'object') { let DynamicURL = API[URL.name] for (const key of Object.keys(URL.params)) { DynamicURL = DynamicURL.replace(':' + key, URL.params[key]) } return DynamicURL } else { return API[URL] } })(), params: options.params, data: options.data }) }
-
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
import Vue from 'vue' import http from './http' Vue.prototype.$http = http
蓝蓝设计建立了UI设计分享群,每天会分享国内外的一些优秀设计,如果有兴趣的话,可以进入一起成长学习,请扫码蓝小助,报下信息,蓝小助会请您入群。欢迎您加入噢~~希望得到建议咨询、商务合作,也请与我们联系。
分享此文一切功德,皆悉回向给文章原作者及众读者
转自:csdn.
免责声明:蓝蓝设计尊重原作者,文章的版权归原作者。如涉及版权问题,请及时与我们取得联系,我们立即更正或删除。
蓝蓝设计( www.lanlanwork.com )是一家专注而深入的界面设计公司,为期望卓越的国内外企业提供卓越的UI界面设计、BS界面设计 、 cs界面设计 、 ipad界面设计 、 包装设计 、 图标定制 、 用户体验 、交互设计、 网站建设 、平面设计服务