实际项目二次封装axios------request.js和使用

2023-11-17

前言

axios 是一个基于Promise 用于浏览器和 nodejs 的 HTTP 客户端,本质上也是对原生XHR的封装,只不过它是Promise的实现版本,符合最新的ES规范,在项目的实际开发中用到也比较多,这里我介绍一下实际开发中的基本配置 

1.axios在项目中的安装

npm i axios --save 或 cnpm i axios --save

1.创建文件

       步骤 1.在src文件夹下创建一个utils(名字随便)文件夹   

               2.在 utils文件夹下创建一个request.js(名字随便)文件

           

 2.  引入与封装,代码如下              

//request.js
import axios from 'axios' //引入 axios
import { MessageBox, Message } from 'element-ui'
import store from '@/store'
import router from '../router'
import { getToken } from '@/utils/auth' //token的存储文件
import Vue from 'vue'
const _this = Vue.prototype
// 创建axios实例
const service = axios.create({
  baseURL: process.env.VUE_APP_BASE_API, ///直接使用.env.development中配置的地址
  // withCredentials: true, // 跨域的时候发送cookie
  timeout: 20000 // 设置超时时间,超时断开请求
})

//请求拦截器
service.interceptors.request.use(
  config => {
    if (store.getters.token) { //如果token纯在
      
      //config.headers['Authorization'] = 'Bearer ' + getToken() //token放到请求头中
      //获取当前时间戳
      var t = new Date().getTime();
      config.headers['timestamp'] = t; //让每个请求都携带当前的时间戳
      config.headers['nonce'] = md5(t + getToken()); //让每个请求都携带随机的加密串
      config.headers['token'] = getToken() //让每个请求携带自定义token 请根据实际情况自行修改
    }
    config.headers['Content-Type'] = 'application/json'
    return config
  },
  error => {
    console.log(error) 
    return Promise.reject(error)
  }
)

// 响应拦截器
service.interceptors.response.use(
  response => {
    const res = response.data
    if (res.code !== 200) {
      //
      if (res.code === 401) { //token失效
        MessageBox.confirm('您的身份证令牌已过期,您可以选择继续留在页面或者重新登录!', {
          confirmButtonText: '重新登录',
          cancelButtonText: '取消',
          type: 'warning'
        }).then(() => {
          // 退出到登录页
          router.push('/login')
        }).catch(err => {

        })
      } else {
        _this.$msg.error(res.message) //如果接口报错了提示接口的错误
      }
      return Promise.reject(new Error(res.message || 'Error'))
    } else {
      if (response.config.method !== 'get') { _this.$msg.success(res.message) } //接口操作成功 只有不是get请求 的时候推出提示消息,(一般都是post,增,修,删需要提示下)
                                                                                //  注意_this.$msg是我自己封装的提示消息的方法,你们用不了,可以用UI框架上的,很简单自行解决,。
      return res
    }
  },
  error => {
    _this.$msg.error(res.message)
    return Promise.reject(error)
  }
)

export default service //暴露封装好的axios

3.挂载

//main.js
import $axios from '@/utils/request' //把封装好的axios引入
const _this = Vue.prototype
_this.$axios = $axios //挂载到vue实例

  4.使用

  getRes() {
      let url = `test/index/indexChartData?`//请求地址
      this.$axios.get(url).then(res=>{
        if(res.code!==200) return;
        // ...逻辑
      }).catch(err=>{

      }).finally(()=>{
        
      })
    }

5.点个赞吧

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

实际项目二次封装axios------request.js和使用 的相关文章

  • 5 款最棒的 Vue 移动端 UI 组件库 - 特别针对国内使用场景推荐

    本文完整版 最棒的 Vue 移动端 UI 组件库 特别针对国内使用场景推荐 Vue 移动端 UI 组件库推荐 Vant 3 有赞移动 UI 组件库 支持 Vue 3 微信小程序 支付宝小程序 Cube UI 滴滴出行移动端 UI 库 质量可
  • 包管理工具那么多,怎么选?npm、yarn 和 pnpm 三者比较及使用详解!

    1 简介 在 Vue 项目中 我们需要使用许多第三方依赖库 如 Vue Router Vuex Axios Element UI 等等 这些依赖库通常以 NPM 包的形式提供 而且在使用时需要进行版本管理 因此 我们需要使用一个包管理工具来
  • 前端大屏常用的适配方案

    假设我们正在开发一个可视化拖拽的搭建平台 可以拖拽生成工作台或可视化大屏 或者直接就是开发一个大屏 首先必须要考虑的一个问题就是页面如何适应屏幕 因为我们在搭建或开发时一般都会基于一个固定的宽高 但是实际的屏幕可能大小不一 接下来我们就尝试
  • Vue3中的pinia使用(收藏版)

    1 pinia介绍 个人网站 紫陌 笔记分享网 想寻找共同学习交流 共同成长的伙伴 请点击 前端学习交流群 pinia 是 Vue 的存储库 它允许您跨组件 页面共享状态 就是和vuex一样的实现数据共享 依据Pinia官方文档 Pinia
  • React事件处理及事件流

    React事件处理 React事件处理是通过将事件处理器绑定到组建上处理事件 事件触发的同时更新组建的内部状态 内部状态更新会触发组件的重绘 React 元素的事件处理和 DOM 元素的事件处理很相似 但语法上的略有区别 在React中事件
  • ant-design-vue 全局和局部引入组件

    1 全局引入 在main js里面引入 import Vue from vue import ant design vue dist antd css import Antd from ant design vue Vue use Antd
  • 基于SpringCloud的分布式网上购物商城

    末尾获取源码 开发语言 Java Java开发工具 JDK1 8 后端 SpringCloud 前端 Vue HTML 数据库 MySQL5 7和Navicat管理工具结合 服务器 Tomcat8 5 开发软件 IDEA Eclipse 是
  • vue项目使用视频播放器vue-video-player

    安装使用 插件有版本限制 如果项目使用的是vue2 0版本 请选择安装 4 x版本 否则会安装不成功 yarn add vue video palyer save 或者 npm install vue video palyer save 组
  • 前端的工程化、模块化和组件化

    什么是工程化 工程化是一种思想而不是某种特定的技术 当然我们在实现项目工程化的过程中 我们也会去使用一些技术 前端工程化是使用软件工程的技术和方法来对前端的开发流程 技术 工具等进行规范化 标准化 其主要目的为了提高效率和降低成本 即提高开
  • c# asp.net学院学生档案管理系统 计算机毕设源码59121

    摘 要 随着互联网大趋势的到来 社会的方方面面 各行各业都在考虑利用互联网作为媒介将自己的信息更及时有效地推广出去 而其中最好的方式就是建立网络管理系统 并对其进行信息管理 由于现在网络的发达 学生档案信息通过网络进行管理掀起了热潮 所以针
  • 自定义hooks

    自定义传参hooks 把大多数的通用代码 或者props 抽成一个hooks 用hooks实现上下文 就不用再一一传参了 实现原理 主要是通过createContext useContext 生产 消费者模式 用于大量props一层一层传参
  • 快速入手 vue3 defindeModel 双向绑定数据,赶快了解下

    彩蛋 在vue3 3x 版本中 官方 RFC 放出了 一个新特性 defineModel 它将让我们在自定义组件上双向绑定数据更加快捷 举个 以前我们父子组件双向数据绑定要在子组件里声明对应的props emts computed 子组件
  • 大事件项目07----10,11,12未录

    1 如果三方jar包对应的对象 2 来自第三方 是无法用 Component及衍生注解生命bean的 3 使用Maven命令 引入jar包 4 这里我们准备了jar包 也提前准备好了jar包的脚本 5 通过本地的方式来安装maven的坐标
  • Vue学习之watch侦听器:案例实现翻译功能

    watch侦听器 作用 监视数据的变化 当数据发生变化时 执行一些业务逻辑或者是异步操作 执行的场景例如在线翻译 当文本区域的内容发生变化时 会发生翻译内容的同时更新 语法 简单的写法 简单数据类型 可以直接的进行监听 完整的写法 添加额外
  • React Jsx转换成真实DOM过程?

    面试官 说说React Jsx转换成真实DOM过程 一 是什么 react 通过将组件编写的 JSX 映射到屏幕 以及组件中的状态发生了变化之后 React 会将这些 变化 更新到屏幕上 在前面文章了解中 JSX 通过 babel 最终转化
  • Vue学习之watch侦听器:案例实现翻译功能

    watch侦听器 作用 监视数据的变化 当数据发生变化时 执行一些业务逻辑或者是异步操作 执行的场景例如在线翻译 当文本区域的内容发生变化时 会发生翻译内容的同时更新 语法 简单的写法 简单数据类型 可以直接的进行监听 完整的写法 添加额外
  • vue中使用echarts实现省市地图绘制,根据数据在地图上显示柱状图信息,增加涟漪特效动画效果

    一 实现效果 使用echarts实现省市地图绘制 根据数据在地图显示柱状图 根据数据显示数据 涟漪效果 二 实现方法 1 安装echarts插件 npm install echarts save 2 获取省市json数据 https dat
  • 执行tsc -v命令后报错‘tsc‘ 不是内部或外部命令,也不是可运行的程序或批处理文件。怎样解决?

    分析 tsc v 这个命令主要是查看typescript编译器的版本号的 也可以用于检查typescript是否安装好了 是否正常 1 如果没有安装的话 就去安装 可以使用 npm ls typescript 查看本地是否安装typescr
  • 黑豹程序员-字符串中查找出重复的字符串

    Collections frequency codeList element 字符串element 在codeList集合中重复的次数 List
  • ❤ Vue3 使用

    Vue3 使用 Vue3之toRefs的使用 作用 toRefs 可以将一个响应式的对象 转换成普通对象 但是转换后的普通对象的每一个属性值都是响应式的 这样我们可以使用es6的对象解构或者三点运算符等操作 代码

随机推荐

  • CK-GW208-EC与汇川PLC配置走EtherCAT通讯指南

    CK GW208 EC这款产品是晨控智能一款工业级 IO LINK 主站网关 支持 EtherCat 工业协议 可通过以太网接口 对 IO LINK 从站设备进行控制 CK GW208 EC 是一款支持标准工业 Ethercat协议的 IO
  • Java网络多线程——UDP编程

    UDP编程通信 基本介绍 类DatagramSocket和DatagramPacket 数据包 数据报 实现了基于UDP协议网络程序 UDP数据报通过数据报套接字DatagramSocket发送和接收 系统不保证UDP数据报一定能安全送到目
  • Mac OS Wireshark 权限不足

    Mac OS Wireshark 权限不足 切换为root用户 sudo su root 切换到 dev目录 cd dev 查看bpf文件的权限 Wireshark监控数据包需要有bpf的读权限 ls l grep bpf bpf文件的权限
  • python实践第5章-函数和lambda表达式

    1 定义一个函数 该函数可接收一个 list 作为参数 该函数使用直接选择排序对 list排序 def ssort list lens len list for i in range lens min i for j in range i
  • 磐云PY-B8 网页注入

    文章目录 1 使用渗透机场景windows7中火狐浏览器访问服务器场景中的get php 根据页面回显获取Flag并提交 2 使用渗透机场景windows7中火狐浏览器访问服务器场景中的post php 根据页面回显获取Flag并提交 3
  • 无线网破解 跑字典 EWSA使用教程

    无线网破解 跑字典 EWSA使用教程 导入握手包 配置攻击字典 步骤阅读 配置EWSA 1 选项 字典DIY 字典设置 密码变化选项 把勾选都去掉 2 选项 字典DIY 字典设置 导入我们自己的字典 生日字典和8位纯数字字典 点击开始测试
  • Arduino编译错误解决办法:fork/exec:…\arm-none-eabi-g++.exe: The filename or extension is too long

    编译错误解决办法 fork exec arm none eabi g exe The filename or extension is too long 解决方案来自Edge Impulse 当使用Arduino编译STM或Arduino文
  • element-ui中,规定from表单提交的时间格式

    element ui中 规定from表单提交的时间格式 比如显示年月日时分秒 但是后台只需要年月日 这个时候就利用value format和format value format绑定值的格式也就是最后后端接口需要我们传的数据格式 forma
  • 【华为OD统一考试A卷

    华为OD统一考试A卷 B卷 新题库说明 2023年5月份 华为官方已经将的 2022 0223Q 1 2 3 4 统一修改为OD统一考试 A卷 和OD统一考试 B卷 你收到的链接上面会标注A卷还是B卷 请注意 根据反馈 目前大部分收到的都是
  • Spring Boot 整合 MyBatis 实现乐观锁和悲观锁

    完整代码 https github com imcloudfloating Lock Demo GitHub Page http blog cloudli top posts Spring Boot MyBatis 实现乐观锁和悲观锁 原文
  • Oracle 数据库审计

    保证数据库的安全有两种方式 一种是通过权限的存取控制机制 即通过预先控制来防止安全事件的发生 另一种是数据库审计 即对数据库活动做跟踪记录 当发生安全事件时 通过对数据库活动记录进行审计来发现并修复安全问题 Oracle使用大量不同的审计方
  • 用Python写个弹球的游戏

    原创 xinxin 菜鸟学Python 我们前面讲了几篇关于类的知识点 为了让大家更好的掌握类的概念 并灵活的运用这些知识 我写了一个有趣又好玩的弹球的游戏 一来可以把类的知识融会一下 二来加深对Python的兴趣 你会发现哎呀Python
  • eclipse Maven 插件添加第三方远程仓库

    方法一 在maven 配置文件setting xml 添加镜像点 mirror eclipse的 preferences gt maven gt User Settings 你就可以看到你的setting xml文件的地址 打开settin
  • SqueezeNet运用到Faster RCNN进行目标检测+OHEM

    目录 目录 一SqueezeNet介绍 MOTIVATION FIRE MODULE ARCHITECTURE EVALUATION 二SqueezeNet与Faster RCNN结合 三SqueezeNetFaster RCNNOHEM
  • unity出pc的包,然后想调试C#的dll咋办

    加入我们的逻辑代码是以dll的方式 放到unity项目中如下 namespace CSharpDll public class Utils public int Add int a int b int c a b return c publ
  • 2013全球移动游戏产业白皮书

    2013全球移动游戏产业白皮书 在全球移动游戏产业迅猛发展的背景下 中国移动游戏产业也进入了 高铁 时代 2013年 中国国内Android和iOS活跃设备量已达到3 7亿部 并涌现出20余款月流水超过千万元的 明星 移动游戏产品 对其内容
  • mysql数据库各种应用_MySQL数据库常见管理应用(1)

    MySQL数据库常见管理应用 1 创建数据库 创建一个数据库solin mysql gt create database solin 建立一个名为solin gbk的GBK字符集 mysql gt create database solin
  • Java通过反射获取注解以及注解中的信息

    首先自定义两个注解 1 用于描述表名 只能用在类 接口 枚举上 Target ElementType TYPE Retention RetentionPolicy RUNTIME public interface TableName Str
  • 《现代控制系统》第五章——反馈控制系统性能分析 5.3 二阶系统的性能

    现在我们看一个单环二阶系统的单位阶跃响应 一个闭环反馈控制系统如下图所示 已知该闭环系统的转换方程为 把受控系统的转换方程代入进去得到 如果给一个阶跃输入 那么 查拉普拉斯逆变换表我们得到时域输出为 其中 同时也是特征方程在s域的根与原点的
  • 实际项目二次封装axios------request.js和使用

    前言 axios 是一个基于Promise 用于浏览器和 nodejs 的 HTTP 客户端 本质上也是对原生XHR的封装 只不过它是Promise的实现版本 符合最新的ES规范 在项目的实际开发中用到也比较多 这里我介绍一下实际开发中的基