Vue3-数据交互请求工具设计

1.安装axios

复制代码
pnpm add axios

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

参考官网:axios中文文档|axios中文网 | axios

在src/utils文件夹下新建request.js,封装axios模块

复制代码
import axios from 'axios'
const baseURL = ''

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

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

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

根据实际api的要求来填充配置

复制代码
import axios from 'axios'
import { useUserStore } from '@/stores'
import { ElMessage } from 'element-plus'
import router from '@/router'
const baseURL = ''

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

//请求拦截器
instance.interceptors.request.use(
  (config) => {
    //2.携带token
    const useSrore = useUserStore()
    if (useSrore.token) {
      config.headers.Authorization = useSrore.token
    }
    return config
  },
  (err) => Promise.reject(err)
)

//响应拦截器
instance.interceptors.response.use(
  (res) => {
    //3.摘取核心响应数据
    if (res.data.code === 0) {
      return res
    }
    //4.处理业务失败,给错误提示,抛出错误
    ElMessage.error(res.data.message || '服务异常')
    return Promise.reject(res.data)
  },
  (err) => {
    //5.处理401错误
    //错误的特殊情况=>401  权限不足 或 token 到期=>拦截到登录
    if (err.response.status === 401) {
      router.push('/login')
    }
    //错误的默认情况=>只要给提示
    ElMessage.error(err.response.data.message || '服务异常')

    return Promise.reject(err)
  }
)
export default instance //默认导出
export { baseURL } //按需导出
相关推荐
大橙子额20 小时前
【解决报错】Cannot assign to read only property ‘exports‘ of object ‘#<Object>‘
前端·javascript·vue.js
LYFlied21 小时前
从 Vue 到 React,再到 React Native:资深前端开发者的平滑过渡指南
vue.js·react native·react.js
爱喝白开水a1 天前
前端AI自动化测试:brower-use调研让大模型帮你做网页交互与测试
前端·人工智能·大模型·prompt·交互·agent·rag
董世昌411 天前
深度解析ES6 Set与Map:相同点、核心差异及实战选型
前端·javascript·es6
B站_计算机毕业设计之家1 天前
豆瓣电影数据采集分析推荐系统 | Python Vue Flask框架 LSTM Echarts多技术融合开发 毕业设计源码 计算机
vue.js·python·机器学习·flask·echarts·lstm·推荐算法
吃杠碰小鸡1 天前
高中数学-数列-导数证明
前端·数学·算法
kingwebo'sZone1 天前
C#使用Aspose.Words把 word转成图片
前端·c#·word
xjt_09011 天前
基于 Vue 3 构建企业级 Web Components 组件库
前端·javascript·vue.js
我是伪码农1 天前
Vue 2.3
前端·javascript·vue.js
夜郎king1 天前
HTML5 SVG 实现日出日落动画与实时天气可视化
前端·html5·svg 日出日落