Vue——axios的二次封装

文章目录


一、请求和传递参数

在 Vue 中,发送请求一般在 created 钩子中,当然放在 mounted 钩子中也没问题。

以下请求的前提都是安装了 axios,并且 import axios from 'axios' 成功导入

Axios官网链接

1、get 请求

get 请求传参,在地址里面通过 ?xxx=123 的形式

javascript 复制代码
  // Vue 环境中
  async created() {
    let res = await axios.get(
      "http://testapi.xuexiluxian.cn/api/slider/getSliders?xxx=123"
    );
    console.log(res);
  }

2、post 请求

post 请求传参,在第二个参数里面传递

javascript 复制代码
  // Vue 环境中
  async created() {
    let res = await axios.post('http://testapi.xuexiluxian.cn/api/course/mostNew', {
      pageNum: 1,
      pageSize: 5
    })
    console.log(res);
  }

3、axios 请求配置

请求配置里面可以设置很多属性

javascript 复制代码
  // Vue环境中
  async created() {
    let res = await axios({
      url: 'http://testapi.xuexiluxian.cn/api/course/mostNew',
      method: 'post', // 默认是 get 请求
      headers: {}, // 自定义请求头
      data: {  // post 请求,前端给后端传递的参数
        pageNum: 1,
        pageSize: 5
      }, 
      params: {}, // get 请求,前端给后端传递的参数
      timeout: 0, // 请求超时
      responseType: 'json' // 返回的数据类型
    })
  console.log(res);
  }

二、axios 的二次封装

目的:方便统一管理

注意:先安装 axios 才可以使用,终端键入:npm i axios,之后回车安装它

1、配置拦截器

在 src 目录下新建 utils 文件夹,该文件夹下创建 request.js 文件

request.js 文件

  1. 首先创建 axios 对象
  2. 添加请求拦截器(前端给后端的参数)
  3. 添加响应拦截器(后端给前端的数据)
javascript 复制代码
import axios from 'axios'

// 创建 axios 对象
const instance = axios.create({
    baseURL: 'http://testapi.xuexiluxian.cn/api', // 根路径
    timeout: 2000 // 网络延时
})

// 添加请求拦截器 => 前端给后端的参数【还没到后端响应】
instance.interceptors.request.use(function (config) {
    // 在发送请求之前做些什么
    return config;
}, function (error) {
    // 对请求错误做些什么
    return Promise.reject(error);
});

// 添加响应拦截器 => 后端给前端的数据【后端返回给前端的东西】
instance.interceptors.response.use(function (response) {
    // 对响应数据做点什么
    return response;
}, function (error) {
    // 对响应错误做点什么
    return Promise.reject(error);
});

// 最终返回的对象
export default instance

2、发送请求

在需要发请求的组件中,导入 request.js, 之后发送请求即可

App.vue 组件

  1. 在需要使用的组件中 导入 request
  2. 直接发送请求即可
javascript 复制代码
<template>
  <div id="app">发送请求</div>
</template>

<script>
import request from "./utils/request";
export default {
  name: "App",
  data() {
    return {};
  },
  created() {
  	// get 请求
    request({
      url: "/course/category/getSecondCategorys",
    }).then((res) => {
      console.log(res);
    });

	// post 请求
    request({
      url: "/course/mostNew",
      method: "post",
      data: {
        pageNum: 1,
        pageSize: 5,
      },
    }).then((res) => {
      console.log(res);
    });
  }
}
</script>

三、API 的解耦

API 解耦的目的:为了同一个接口可以多次使用; 为了方便 api 请求统一管理

1、配置文件对应的请求

在 src 目录下新建 api 文件夹,该文件夹下创建 xxx.js 文件,配置对应请求

javascript 复制代码
import { axios } from "@/utils/request"
import requestJpaas from "../../utils/geteway"
import serve from "./serve"
const { getData } = requestJpaas
// 服务
const prefix = "/jpaas-jiop-web-server"
const api = {
	// 获取用户信息
	getUserInfo: prefix + "/interface/buttjoint/jisbuttsuccess",
}

export const yhzxAPI = {
	// 获取用户信息
	getUserInfo(params) {
		return axios({
			url: api.getUserInfo,
			method: "get",
			params
		})
	},
	// 网关接口
	queryList(appid, interface_id, params) {
		return getData({
			appid,
			interface_id,
			params
		})
	}
}

2、获取请求的数据

App.vue 组件

从文件定义的请求中导入对应函数

获取数据

javascript 复制代码
<template>
  <div>
  </div>
</template>

<script>
import { yhzxAPI } from '@/api/yhzx/yhzx.js'

export default {
  name: 'IndexView',
  data() {
    return {}
  },
  created() {
  	this.getRecord()
  },
  mounted() {},
  methods: {
    getRecord() {
      let params = {
        title: document.title,
        address: encodeURIComponent(location.href),
        type: 'xxxxxx',
      }
      yhzxAPI
        .getUserInfo(params)
        .then((result) => {
          if (result.code == 200 && result.success) {
            console.log('我的足迹添加成功!')
          } else {
            console.log('我的足迹添加失败或未登录!')
          }
        })
        .catch((err) => {
          console.log(err)
        })
    },
  }
}
</script>

<style scoped lang="less">

</style>

四、总结

对 axios 的二次封装,在企业级项目中是 必须 要配置的。

因为经过封装的 axios,更容易使用和管理,并且可以 减少代码量,让 逻辑更清晰

相关推荐
子兮曰14 小时前
Bun v1.3.14 深度解析:Image API、HTTP/3、全局虚拟存储与五十项变革
前端·后端·bun
kyriewen15 小时前
今天,百年巨头一次砍了9200人,而一个离职科学家的实话让全网睡不着觉
前端·openai·ai编程
问心无愧051315 小时前
ctf show web 入门42
android·前端·android studio
kyriewen15 小时前
老板逼我上AI,我偷偷在浏览器里跑LLaMA,省下20万API费
前端·react.js·llm
Beginner x_u15 小时前
前端八股整理(手写 02)|数组转树、数组扁平化、随机打乱一个数组
前端·数组·数组转树·数组扁平化
KaMeidebaby16 小时前
卡梅德生物技术快报|禽类成纤维细胞 FISH 实验:鸟类性别染色体基因定位技术实现与数据验证
前端·数据库·其他·百度·新浪微博
天若有情67316 小时前
前端高阶性能优化:跳出传统懒加载与预加载,基于用户行为做轻量预判加载
前端·性能优化
小小小小宇16 小时前
前端转后端:SQL 是什么
前端
张元清17 小时前
React Observer Hooks:7 种监听 DOM 而不写样板代码的方式
前端·javascript·面试
广州华水科技17 小时前
单北斗GNSS变形监测是什么?主要有怎样的应用与优势?
前端