vue中实现axios封装

2023-05-16

vue中实现axios封装

    • 为什么要进行axios封装
    • vue项目安装axios
    • 封装前的get和post请求
    • 封装后的get和post请求

为什么要进行axios封装

实际开发过程中可能有几种环境,开发环境测试环境生产环境。最开始开发的时候在开发环境,所有调用接口的链接都指向开发环境链接。到了开发完成阶段需要切换到测试环境和生产环境,如果按照封装前的请求方式(如下第一种形式),需要进入每一个文件更改请求url,十分繁琐。因此我们需要将网络请求封装,把所有的网络请求做成一个封装的形式,封装成一个单独文件进行引入,这样一来,项目结构更加清晰,0更换环境时只需要修改api.js文件中的_api_root即可,不需要进入每个文件修改请求url。
在这里插入图片描述

在这里插入图片描述

vue项目安装axios

在这里我是使用npm进行axios安装,安装命令如下:

npm install axios

在这里使用get和post请求进行示例

封装前的get和post请求

  1. axios.get 发送get请求
    参数一 :表示请求地址
    参数二 :表示配置信息 (下面两个为固定参数)
    ① params(传递到服务器端的数据,以url参数的形式拼接在请求地址后面)
    例如:https://api.cat-shop.penkuoer.com/api/v1/products?page=3&per=2
    ② header 表示请求头
  2. axios.post发送post请求,请求传递三个参数
    参数一: 请求地址
    参数二: 传递的数据,在请求体中传递
    (axios默认发送的数据是JSON格式的,因为headers默认属性content-type:‘application/json’ )
    参数三: 配置信息(可选,不是必要,例如下面的params)

App.vue

<template>
  <div>
    <div>
      <button @click="getHandle">发送get请求</button>
      <button @click="postHandle">发送post请求</button>
    </div>
  </div>
</template>

<script>
import axios from 'axios'
export default {
  name: 'App',
  methods:{
    //axios.get 发送get请求
    //参数一 表示请求地址
    //参数二 表示配置信息 
    //params(传递到服务器端的数据,以url参数的形式拼接在请求地址后面)
    //header 请求头
    getHandle(){
      axios.get("https://api.cat-shop.penkuoer.com/api/v1/products",{
        params:{
          page:3,
          per:2
        },
        headers:{}
      }).then(res=>console.log(res));
    },
    postHandle(){
      //post请求传递三个参数
      //参数一 :请求地址
      //参数二:传递的数据,在请求体中传递
      //axios默认发送的数据是JSON格式的,因为headers默认属性content-type:‘application/json' 
      //参数三: 配置信息(可选)
      axios.post("https://api.cat-shop.penkuoer.com/api/v1/auth/login",{
        userName:"xiaoming",
        password:'111111'
      },
      {
        params:{
          a:123,
          b:"haha"
        }
      }).then(res=>console.log(res))
      .catch(err=>console.log(err));
    },

  }
}
</script>

封装后的get和post请求

在src目录下创建utils文件夹 【src->utils】
在utils目录下创建API文件夹和request.js文件【utils->API,utils->request.js】
在API目录下创建api.js文件【API->api.js】

目录结构如下:
在这里插入图片描述

request.js

import axios from 'axios'
import api from './API/api.js'

//创建一个axios的对象
const instance = axios.create({
    baseURL: "https://api.cat-shop.penkuoer.com", //baseURL会在发送请求时拼接在url参数前面
    timeout: 5000
})

//请求拦截
//所有的网络请求都会先走这个方法,我们可以在他里面为请求添加一些自定义的内容
instance.interceptors.request.use(
    function(config) {
        console.group('全局请求拦截');
        console.log(config);
        console.groupEnd();
        //token是跟服务器约定好的
        config.headers.token = "123456";
        return config;
    },
    function(err) {
        return Promise.reject(err);
    }
);

//响应拦截
//所有的网络请求返回数据之后都会先执行此方法
//此处可以根据服务器的返回状态码做相应的数据
instance.interceptors.response.use(
    function(response) {
        console.group('全局响应拦截');
        console.log(response);
        console.groupEnd();
        return response;
    },
    function(err) {
        return Promise.reject(err);
    }
);

export function getInfo(page, per) {
    return instance.get(api.get.getInfo + "?page=" + page + "?per=" + per);
}
export function postLogin(data) {
    return instance.post(api.post.postLogin, data)
}

api.js

var _api_root = "https://api.cat-shop.penkuoer.com/";
var api = {
    get: {
        getInfo: _api_root + "api/v1/products",
    },

    post: {
        postLogin: _api_root + "api/v1/auth/login",
    },

};
export default api;

App.vue

<template>
  <div>
    <div>
      <button @click="getHandle">发送get请求</button>
      <button @click="postHandle">发送post请求</button>
      <button @click="getHandle2">调用封装的get请求</button>
      <button @click="postHandle2">调用封装的post请求</button>
    </div>
  </div>
</template>

<script>
import axios from 'axios'
//注意引用request.js文件中的get,post方法
import {getInfo,postLogin} from './utils/request.js'
export default {
  name: 'App',
  methods:{
    getHandle2(){
      // 也可以这样写:get(3,2).then(res=>console.log(res));
      return getInfo(3,2).then(
        (res)=>{
          console.log(res);
        },
        (err) => {
				  console.log(err);
				}
      )
    },
    post(userName,password){
      return postLogin({userName,password}).then(
        (res)=>{
          console.log(res);
        },
        (err) => {
				  console.log(err);
				}
      )
    },
    postHandle2(){
      let userName="xiaoming";
      let password="111111";
      this.postHandle2(userName,password);
    }    
  }
}
</script>

在这里插入图片描述
😀 😀 😀 参考资料:B站讲的挺好的up主

✿✿ヽ(°▽°)ノ✿✿✿ヽ(°▽°)ノ✿✿✿ヽ(°▽°)ノ✿😀 😀 😀😀 😀 😀 ✿✿ヽ(°▽°)ノ✿✿✿ヽ(°▽°)ノ✿✿✿ヽ(°▽°)ノ✿

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

vue中实现axios封装 的相关文章

随机推荐

  • Java中Integer.parseInt()方法最全解析

    介绍 是Integer类中提供的一个静态方法 用于将传入的string类型字符串根据要求转为相应进制的int值 如果没有要求进制则按10进制计算 xff0c 属于java lang包的 xff1b 使用讲解 1 parseInt Strin
  • LeetCode538:把二叉搜索树转换为累加树

    要求 给出二叉 搜索 树的根节点 xff0c 该树的节点值各不相同 xff0c 请你将其转换为累加树 xff08 Greater Sum Tree xff09 xff0c 使每个节点 node 的新值等于原树中大于或等于 node val
  • python 最小堆类型: heapq

    目录 1 heapq 的常用方法 2 几个例子 a 最小堆的创建以及增删 b 如何使用 heapq 创建最大堆 c 获取第 k 大 第 k 小数据 d 列表中的元素是元组 heapq 是 python 的一个库 xff0c 用一个列表来维护
  • LeetCode543:二叉树的直径

    要求 给定一棵二叉树 xff0c 你需要计算它的直径长度 一棵二叉树的直径长度是任意两个结点路径长度中的最大值 这条路径可能穿过也可能不穿过根结点 题目解析 这里返回的是 xff1a 两结点之间的路径长度是以它们之间边的数目表示 最大的直径
  • LeetCode560:和为K的子数组

    要求 给你一个整数数组 nums 和一个整数 k xff0c 请你统计并返回 该数组中和为 k 的连续子数组的个数 思路 方法一 xff1a 暴力解 先固定左边界 xff0c 再去枚举右边 span class token keyword
  • LeetCode581:最短无序连续子数组

    要求 给你一个整数数组 nums xff0c 你需要找出一个 连续子数组 xff0c 如果对这个子数组进行升序排序 xff0c 那么整个数组都会变为升序排序 请你找出符合题意的 最短 子数组 xff0c 并输出它的长度 思路 我们可以假设把
  • LeetCoed617:合并二叉树

    要求 给你两棵二叉树 xff1a root1 和 root2 想象一下 xff0c 当你将其中一棵覆盖到另一棵之上时 xff0c 两棵树上的一些节点将会重叠 xff08 而另一些不会 xff09 你需要将这两棵树合并成一棵新二叉树 合并的规
  • LeetCode621:任务调度器

    要求 给你一个用字符数组 tasks 表示的 CPU 需要执行的任务列表 其中每个字母表示一种不同种类的任务 任务可以以任意顺序执行 xff0c 并且每个任务都可以在 1 个单位时间内执行完 在任何一个单位时间 xff0c CPU 可以完成
  • LeetCode647:回文子串

    要求 给你一个字符串 s xff0c 请你统计并返回这个字符串中 回文子串 的数目 回文字符串 是正着读和倒过来读一样的字符串 子字符串 是字符串中的由连续字符组成的一个序列 具有不同开始位置或结束位置的子串 xff0c 即使是由相同的字符
  • LeetCode739:每日温度

    要求 给定一个整数数组 temperatures xff0c 表示每天的温度 xff0c 返回一个数组 answer xff0c 其中 answer i 是指对于第 i 天 xff0c 下一个更高温度出现在几天后 如果气温在这之后都不会升高
  • 八大排序算法

    介绍 排序也称排序算法 Sort Algorithm xff0c 排序是将一组数据 xff0c 依指定的顺序进行排列的过程 排序分类 1 内部排序 指将需要处理的所有数据都加载到内部存储器 内存 中进行排序 2 外部排序法 数据量过大 xf
  • 时间复杂度和空间复杂度详解及排序算法复杂度

    时间复杂度 度量一个程序 算法 执行时间的两种方法 1 事前估算法 通过分析某个算法的时间复杂度来判断哪个算法更优 2 事后统计法 这种方法可行 xff0c 但是有两个问题 xff1a 一是要想对设计的算法的运行性能进行评测 xff0c 需
  • Java反编译工具JAD的安装与简单使用

    jad介绍 jad 是一个使用非常广泛的 Java 反编译工具 可以将java编译后的class文件反编译成对应的java文件 下载地址 JAD下载地址 xff0c 点击跳转https varaneckas com jad 按照自己的需求
  • python Counter() 函数

    目录 1 以统计列表中的词频为例 2 寻找出现次数最多的 k 个数 刷 leetcode 时发现了可以很方便地统计词频的 Counter 函数 xff0c 有了这个函数就不用手动的使用 for 循环来手动统计词频啦 xff01 Counte
  • C++11 新特性简介

    1 auto auto是旧关键字 xff0c 在C 43 43 11之前 xff0c auto用来声明自动变量 xff0c 表明变量存储在栈 xff0c 很少使用 在C 43 43 11中被赋予了新的含义和作用 xff0c 用于类型推断 a
  • Java反射(Reflex)机制

    反射概述 Reflection 反射 是Java被视为动态语言的关键 xff0c 反射机制允许程序在执行期借助于Reflection API取得任何类的内部信息 xff0c 并能直接操作任意对象的内部属性及方法 加载完类之后 xff0c 在
  • 偏航角、俯仰角、滚动角

    偏航角 俯仰角 滚动角 在姿态估计中 xff0c 常常会提到三个概念 xff0c 就是偏航角 俯仰角和滚动角 姿态估计是物体在三维空间内方向的表征 通常描述物体姿态以大地作为参考系 xff08 标准坐标系 xff09 将世界坐标系 xff0
  • 定时器与计数器的区别

    曾经我在北方工业大学复试的时候 xff0c 有个老师问了我个问题 他说同学你好 xff0c 我看你前面一直都在说深度学习的问题 xff0c 请问你对单片机了解吗 xff1f xff0c 请问定时器与计数器的区别是什么 xff1f 我告诉他
  • 编译make px4_fmu-v2_default upload时,报错ERROR Board can accept larger flash images (2080768 bytes)

    编译make px4 fmu v2 default upload时 xff0c 报错ERROR Board can accept larger flash images 2080768 bytes than board config 103
  • vue中实现axios封装

    vue中实现axios封装 为什么要进行axios封装vue项目安装axios封装前的get和post请求封装后的get和post请求 为什么要进行axios封装 实际开发过程中可能有几种环境 xff0c 开发环境 xff0c 测试环境 x