封装使用axios进行接口请求

2023-05-16

一、安装axios

  1. npm install axios
  2. 在main.js引入
import axios from "axios"
Vue.use(axios) // vue3使用createApp(App).config.globalProperties.$axios = axios

二、创建request.js封装axios

  1. 引入
import axios from 'axios'
import { Toast } from 'vant' // toust是vant组件中轻提示,可根据项目更改
  1. 设置环境切换axios baseUrl
if (process.env.NODE_ENV === 'development') {
  axios.defaults.baseURL = 'http://开发环境接口地址'
} else if (process.env.NODE_ENV === 'debug') {
  axios.defaults.baseURL = 'http://测试环境接口地址'
} else if (process.env.NODE_ENV === 'production') {
  axios.defaults.baseURL = 'http://生产环境接口地址'
}
  1. 设置请求超时时间
axios.defaults.timeout = 10000; // 10s
  1. 设置请求头
axios.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded;charset=UTF-8';
  1. 请求拦截(判断已经登录才请求)
axios.interceptors.request.use( 
  config => {
    // 每次发送请求之前判断是否存在token        
    // 如果存在,则统一在http请求的header都加上token,这样后台根据token判断你的登录情况
    // 即使本地存在token,也有可能token是过期的,所以在响应拦截器中要对返回状态进行判断 
    const token = '获取token' // 存在vuex,本地或者cookie
    if (token) {
      config.headers.Authorization = token // Authorization是后台接收的参数名
      // 或者
      // config.headers['Authorization'] = token // Authorization是后台接收的参数名
    }
    return config;
  },
  error => {        
   return Promise.error(error);    
  }
)
  1. 响应拦截
axios.interceptors.response.use(
  response => {
    // 如果返回的状态码为200,说明接口请求成功,可以正常拿到数据     
    // 否则的话抛出错误
    if (response.status === 200) {
      return Promise.resolve(response);
    } else {
      return Promise.reject(response);
    }
  },
  // 服务器状态码不是2开头的的情况
  // 这里可以跟你们的后台开发人员协商好统一的错误状态码    
  // 然后根据返回的状态码进行一些操作,例如登录过期提示,错误提示等等
  // 下面列举几个常见的操作,其他需求可自行扩展
  error => {
    if (error.response.status) {
      switch (error.response.status) {
        // 401: 未登录
        // 未登录则跳转登录页面,并携带当前页面的路径
        // 在登录成功后返回当前页面,这一步需要在登录页操作。                
        case 401:
          router.replace({
            path: '/login',
            query: {
              redirect: router.currentRoute.fullPath
            }
          });
          break;

        // 403 token过期
        // 登录过期对用户进行提示
        // 清除本地token和清空vuex中token对象
        // 跳转登录页面                
        case 403:
          Toast('登录过期,请重新登录');
          // 清除token
          localStorage.removeItem('token'); // 这里是本地存储的清除,需根据实际情况清除
          store.commit('loginSuccess', null); // 这里是vuex状态的清除,需根据实际情况清除
          // 跳转登录页面,并将要浏览的页面fullPath传过去,登录成功后跳转需要访问的页面 
          setTimeout(() => {
            router.replace({
              path: '/login',
              query: {
                redirect: router.currentRoute.fullPath
              }
            });
          }, 1000);
          break;

        // 404请求不存在
        case 404:
          Toast( '网络请求不存在');
          break;
        // 其他错误,直接抛出错误提示
        default:
          Toast( error.response.data.message);
      }
      return Promise.reject(error.response);
    }
  }
)
  1. 导出axios
export default axios;

三、创建需要的api.js

  1. 引入request.js
import request from '@/utils/request'; // 路径根据实践情况
import qs from 'qs'; // 安装引入qs用于序列化参数(axios post方法需要传递序列化的参数)
  1. 导出请求的函数
export function login(data) {
  return request({
    url: '/api/user/login/',
    method: 'post',
    data: qs.stringify(data)
    })
}
export function getInfo(data) {
  return request({
    url: '/api-token-auth',
    method: 'get',
    params: data
  })
}

注意:

axios的post和get方法传参略有不同:

  1. post请求参数必须序列化,可以使用qs模块
  2. post请求发送参数使用data: {},data 是作为请求主体被发送的数据
  3. get请求发送参数使用params: {},params 是即将与请求一起发送的 URL 参数

四、在页面中调用

  1. 引入
import * as 名称 from '路径': // 例:import * as Http from "@/api/login";
  1. 使用
Http.login(this.loginForm)
  .then(res => {
   // 请求成功操作
  })
  .catch(err => {
    // 请求失败操作
  });
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

封装使用axios进行接口请求 的相关文章

  • java中各种类型用Stream流求最大值最小值

    文章目录 java中各种类型用Stream流求最大值最小值一 BigDecimal 求最大值和最小值1 stream reduce 实现2 stream max 或stream min 实现 二 Integer 求最大值和最小值1 stre
  • idea:使用easyYapi插件导出yapi接口

    文章目录 idea xff1a 使用easyYapi插件导出yapi接口一 安装插件easyYapi二 配置easyYapiToken方式项目id方式 idea xff1a 使用easyYapi插件导出yapi接口 一 安装插件easyYa
  • springboot:各种下载文件的方式

    文章目录 springboot xff1a 各种下载文件的方式一 使用response输出流下载二 使用ResponseEntity三 注意 springboot xff1a 各种下载文件的方式 一 使用response输出流下载 注意第一
  • prometheus数据远程写入elasticsearch

    文章目录 prometheus数据远程写入elasticsearch一 部署elasticsearch二 部署prometheus三 通过prometheusbeat写入数据到es四 elasticsearch head验证 prometh
  • ElasticSearch 基本使用

    文章目录 ElasticSearch 基本使用一 简介二 参考文档三 ES核心概念核心概念数据类型 四 REST APIS索引API文档API查询文档API 五 SQL REST API ElasticSearch 基本使用 系统环境 El
  • SpringBoot集成Easy-Es

    文章目录 SpringBoot集成Easy Es一 集成demo二 索引CRUD创建索引查询索引更新索引删除索引 三 数据CURD四 参数文档 SpringBoot集成Easy Es Easy Es xff08 简称EE xff09 是一款
  • 最简单的markdown里面插入图片的办法 (用魔法打败魔法)

    这个问题困扰了我很久 xff1a 笔者非常喜欢用markdown 觉得他轻便 灵活 美观 xff0c 但是奈何 xff0c markdown里面插图片会显得有些棘手 xff0c 比方说最简单的用本地图片 markdown里面就是本机图片的路
  • c++面试必问:c++和c的8点不同

    前言 xff1a 最近发现很多面试题都会问到c 43 43 和c的不同 xff1b 总结一下 xff0c 发现遗漏的知识点还是挺多的 xff1b 比如c语言中 xff0c const关键字是个冒牌货 xff1b c 43 43 中struc
  • 01 - 树莓派简介以及烧录系统

    树莓派简介 指路B站 1 树莓派是什么 xff1f 树莓派就是计算机 xff0c 而计算机就是由运算器 控制器 I O设备等硬件部分以及由操作系统 应用程序组成的软件部分共同组成的整体 xff0c 即硬件和软件共同组成的整体就是计算机 xf
  • 上线啦,可以定时周期性提醒群成员的机器人

    这是站在巨人肩膀上的成果 啊 xff0c 有点夸张了 xff0c 总之简单地说 xff0c 熬了几个小时的探索和在洪振的小小帮助下实现了 xff0c 这个小小的但很有用的功能 实现钉钉机器人的自动周期性提醒群成员消息并可以选择是否 64 所
  • 如何在github上建立个人博客?

    如何在github上建立个人博客 xff1f Windows10 使用GitHub 43 Hexo 模板建立个人博客 前期准备 xff1a 1 git 2 node js 验证是否安装成功 xff1a win 43 r 输入 cmd 进入命
  • 用lvm为centos-root逻辑卷扩容

    在用linux进行开发的时候 xff0c 发现centos root下只有50G的空间 xff0c 不满足实际的需求 解决的方法有两种 xff0c 一种是外挂硬盘 xff0c 将其格式化并挂载在某目录下 xff08 如mnt xff09 x
  • STM32 IO模拟实现软件串口

    最近项目中STM32的串口资源紧张 xff0c 于是使用IO口进行模拟串口 xff0c 现进行整理记录 实现思路 IO口模拟串口的思路也比较简单 xff0c 一切按照串口协议进行操作即可 对于发送 xff0c 计算好不同波特率对应的延时时间
  • Linux命令大全(排版清晰!!持续更新!!非常详细)

    前言 最近在使用Linux的时候 xff0c 发现有很多命令不太会 在csdn查阅命令大全的时候 xff0c 发现很多文章都没有很好的排版 xff0c 于是写一篇文章 xff0c 希望能够帮助到大家 xff01 文章内容较多 xff0c 可
  • VScode 结合git的全面使用流程,再也不用记住git的命令了!

    前言 搭建 git 的环境 xff0c 能够方便的在服务器上管理好自己的代码 但是原始的git代码挺难记的 xff0c 而且会降低我们的工作效率 本文主要介绍如何使用vscode与git结合 xff0c 优雅的使用git git 介绍 这里
  • IntelliJ IDEA运行单个java类文件,并且不检查其他类的错误,通过编译

    IntelliJ IDEA运行单个java类文件 xff0c 并且不检查其他类的错误 xff0c 通过编译 前言 从Eclipse转换过来使用IDEA工具时执行java中的main方法块遇到一个问题 xff0c 当前java类的main方法
  • Java IO之:BufferedReader(超详细解析,使用方法说明)

    Java IO操作 BufferedReader 缓冲区读取内容 xff0c 避免中文乱码 要点 xff1a 掌握BufferedReader类的使用 掌握键盘输入的基本形式 Buffer xff1a 表示缓冲区的 之前的StringBuf
  • 一文搞定子网划分!子网掩码!超详细例题解析!

    子网划分理论基础 为什么进行子网划分 减少网络流量 xff0c 无论什么样的流量 xff0c 我们都希望它少些 xff0c 网络流量亦如此 如果没有可信赖的路由器 xff0c 网络流量可能导致整个网络停顿 xff0c 但有了路由器后 xff
  • javafx之webEngine超详细解析

    JavaFX WebEngine JavaFX教程 JavaFX WebEngine JavaFX 提供与 HTML5 内容互操作的功能 JavaFX 中的底层网页渲染引擎是名为 WebKit 的流行的开源API 此 API 用于 Appl
  • Java面试复习体系总结(2021版,持续更新)

    Java面试复习体系总结 xff08 2021版 xff09 感谢各位点赞 xff0c 收藏 xff0c 关注 xff01 文章会持续更新 xff0c 继续输出更多优质内容 xff0c 希望各位都能拿到好的offer 如果在准备算法题的话

随机推荐