分享一个自己封装的 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,
},
},
})
},
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
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
})
}
import Vue from 'vue'
import http from './http'
Vue.prototype.$http = http
|