axios学习

概述

axios就是对http请求响应的封装。

可以设置请求地址和超时时间。

还可以添加请求拦截器和响应拦截器。

请求拦截器可以设置登录后携带token的header访问请求地址。

响应拦截器可以设置直接获取核心响应数据(data字段),请求失败处理,401处理(无权限)

http://www.axios-js.com/

实践

安装 axios

1
pnpm add axios

新建 utils/request.js 封装 axios 模块

利用 axios.create 创建一个自定义的 axios 来使用

语法:

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
import axios from 'axios'

const baseURL = 'http://big-event-vue-api-t.itheima.net'

const instance = axios.create({
// TODO 1. 基础地址,超时时间
})

instance.interceptors.request.use(
(config) => {
// TODO 2. 携带token
return config
},
(err) => Promise.reject(err)
)

instance.interceptors.response.use(
(res) => {
// TODO 3. 处理业务失败
// TODO 4. 摘取核心响应数据
return res
},
(err) => {
// TODO 5. 处理401错误
return Promise.reject(err)
}
)

export default instance

实例:

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
import { useUserStore } from '@/stores/user'
import axios from 'axios'
import router from '@/router'
import { ElMessage } from 'element-plus'

const baseURL = 'http://localhost:9999'

const instance = axios.create({
baseURL,
timeout: 100000
})

instance.interceptors.request.use(
(config) => {
const userStore = useUserStore()
if (userStore.token) {
config.headers.Authorization = userStore.token
}
return config
},
(err) => Promise.reject(err)
)

instance.interceptors.response.use(
(res) => {
if (res.data.code === 200) {
return res
}

if (res.data.code === 401) {
router.push('/login')
} else {
ElMessage({ message: res.data.msg || '服务异常', type: 'error' })
}
return Promise.reject(res.data)
},
(err) => {
console.log(err)
ElMessage({
message: err.message || '服务异常',
type: 'error'
})
if (err?.code === 401) {
router.push('/login')
}
return Promise.reject(err)
}
)

export default instance
export { baseURL }

axios学习
http://hanqichuan.com/2024/10/22/前端/axios学习/
作者
韩启川
发布于
2024年10月22日
许可协议