在开发项目的时候,避免不了与后端进行交互,因此我们需要使用axios插件实现发送网络请求。在开发项目的时候,我们经常会把axios进行二次封装。
目的:
- 使用请求拦截器,可以在请求拦截器中处理一些业务(开始进度条、请求头携带公共参数)。
- 使用响应拦截器,可以在响应拦截器中处理一些业务(进度条结束、简化服务器返回的数据、处理http网络错误)。
一、安装axios
pnpm install axios
二、封装axios
在项目根目录下创建文件utils/request.ts。
文件内容如下:
// 进行axios二次封装,使用请求与响应拦截器
import axios from 'axios'
import { ElMessage } from 'element-plus'
// 第一步:利用axios对象的create方法,创建axios实例(其他的配置:基础路径、超时时间等)
const request = axios.create({
baseURL: import.meta.env.VITE_APP_BASE_URL,
timeout: 5000
})
// 第二步:request实例添加请求拦截器
request.interceptors.request.use((config) => {
// config配置对象,headers属性请求头,经常给服务器端携带公共参数
// 返回配置对象
return config
})
// 第三步:request实例添加响应拦截器
request.interceptors.response.use(
(response) => {
// 成功回调
// 简化数据
return response.data
},
(error) => {
// 失败回调,处理http网络错误的
// 定义一个变量:存储网络错误的信息
let message = ''
// http状态码
const status = error.response.status
switch (status) {
case 401:
message = 'token过期'
break
case 403:
message = '无权访问'
break
case 404:
message = '请求地址错误'
break
case 500:
message = '服务器出现问题'
break
default:
message = '网络出现问题'
break
}
ElMessage({
type: 'error',
message
})
// 中断请求
return Promise.reject(error)
}
)
// 对外暴露
export default request