axios二次封装

导读:axios用于网络请求、在开发时常常进行二次封装便于前端请求接口时,在网络请求和响应拦截器中做统一处理

1、创建axios实例

配置接口基地址baseURL,接口超时时间timeout 等等
VITE_BASE_URL 在.env文件中配置, 可查看上一篇.env文件详解

import axios from 'axios'
import { ElMessage } from 'element-plus'
import 'element-plus/theme-chalk/el-message.css'
// 用户信息操作模块,包含登录,登出等
import { useUserStore } from '@/stores/user'
import router from '@/router'

const httpInstance = axios.create({
  baseURL: import.meta.env.VITE_BASE_URL,
  timeout: 5000,
})
2、请求拦截器

给接口请求头带上token,数据加密 等等

httpInstance.interceptors.request.use(
  function (config) {
    // 在发送请求之前做些什么,比如token,数据加密
    const userStore = useUserStore()
    const token = userStore.userInfo.token
    if (token) {
      config.headers.Authorization = `Bearer ${token}`
    }
    if (config.data) config.data = "数据加密"
    return config
  },
  function (error) {
    // 对请求错误做些什么
    return Promise.reject(error)
  }
)
3、响应拦截器

拦截登录失效401 及其他的非成功返回状态码,做出不同处理。
数据解密 等

httpInstance.interceptors.response.use(
  function (response) {
    // 2xx 范围内的状态码都会触发该函数。
    // 对响应数据操作,比如解密
    return response
  },
  function (error) {
    const userStore = useUserStore()
    // 超出 2xx 范围的状态码都会触发该函数。
    // 对响应错误做点什么
    if (error.response.status === 401) {
      // 拦截登录失效401错误
      userStore.toQuit()
      router.push('/login')
    }
    ElMessage({
      type: 'warning',
      message: error.response.data.msg,
    })
    return Promise.reject(error)
  }
)
4、导出axios实例
export default httpInstance
  • Token的有效性可以保持一段时间,如果用户一段时间不做任何操作,Token就会失效,
    使用失效的Token再去请求一些接口,接口就会报401状态码错误,
    需要我们做额外处理:
  1. 清除掉旧的token
  2. 切换成非登录状态
  3. 跳转到登录页面
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值