概述
axios就是对http请求响应的封装。
可以设置请求地址和超时时间。
还可以添加请求拦截器和响应拦截器。
请求拦截器可以设置登录后携带token的header访问请求地址。
响应拦截器可以设置直接获取核心响应数据(data字段),请求失败处理,401处理(无权限)
http://www.axios-js.com/
实践
安装 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({ })
instance.interceptors.request.use( (config) => { return config }, (err) => Promise.reject(err) )
instance.interceptors.response.use( (res) => { return res }, (err) => { 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 }
|