axios的二次封装

Axios 是一个基于 promise 的 HTTP 库,可以用在浏览器和 node.js 中,特性【摘自官网 】:

  • 支持 Promise API
  • 拦截请求和响应
  • 转换请求数据和响应数据
  • 取消请求
  • 自动转换 JSON 数据
  • ... ...

二次封装 axios:

① 安装依赖

npm i axios

② 创建实例对象

js 复制代码
const instance = axios.create({
  baseURL: 'https://v3pz.itndedu.com/v3pz',
  timeout: 5000
})

③ 添加请求拦截器:在请求被处理之前拦截,在这里可以统一配置请求头、添加 token、封装 get,post,put,delete 请求、加上接口错误重试机制等等

js 复制代码
instance.interceptors.request.use(config => {
  const token = localStorage.getItem('TOKEN')
  // 不需要token的api
  const whiteUrl = ['/get/code', '/user/authentication', '/login']
  if(token && !whiteUrl.includes(config.url)) {
    // 需要token验证的,在请求头中设置token
    config.headers['x-token'] = token
  }
  return config
}, error => {
  return Promise.reject(error)
})

④ 添加响应拦截器:在这里对 http 错误码进行拦截、简化返回的信息等

js 复制代码
instance.interceptors.response.use(response => {
  if(response.data.code === -1) {
    // console.log(response)
    ElMessage.warning(response.data.msg || response.data.message?.msg || response.data.message)
  } else if(response.data.code === -2) {
    // token 过期
    localStorage.removeItem('TOKEN')
    localStorage.removeItem('USERINFO')
    localStorage.removeItem('menu')
    // 跳转到同源的根目录:http://localhost:5173/
    window.location.href = window.location.origin
    ElMessage.error('token过期,请重新登录')
  }
  // 直接返回data,调用层少一层 .data
  return response.data
}, error => {
  // 超出 2xx 范围的状态码都会触发该函数
  return Promise.reject(error)
})
相关推荐
lichenyang4531 小时前
鸿蒙首页从等高商品 Grid 到双列瀑布流:同一张图也能做出小红书式浏览节奏
前端
里欧跑得慢1 小时前
Flutter主题与样式详解
前端·css·flutter·web
计算机魔术师1 小时前
TPU推理性价比翻50%,NVIDIA的护城河要见底了?
前端
IT_陈寒2 小时前
Python的多线程就是个假把式,我算是体验到了
前端·人工智能·后端
亮工硬件2 小时前
1-11 STM32内部FLASH(数据掉电保存)
笔记·stm32·单片机·嵌入式硬件·学习
传奇开心果编程2 小时前
【Rust入门知识点学与练】第17课:闭包 Closures
开发语言·学习·rust
OpenTiny社区2 小时前
【直播分享】GenUI SDK 技术公开课第二讲 | GenuiChat 核心配置深度解析
前端·github
计算机魔术师2 小时前
kernel.org 每天 600 万次请求,98% 不是人点的
前端
今日无bug2 小时前
从0到1手撕流式输出:Vue3 + Vite 实现 LLM 流式响应全解析
前端·vue.js·vite
今夜有雨.3 小时前
C# 学习文档(零基础入门)
开发语言·学习·c#