前端项目,个人笔记(三)【Vue-cli - api封装-axios使用举例】

news2024/11/28 10:58:05

目录

前言

1、axios配置与测试

1.1、配置

1.2、测试

2、使用axios案例-渲染header

3、Pinia优化重复请求

3.1、为什么?

3.2、使用Pinia优化代码步骤

步骤一:在main.js中创建 Pinia 实例,并将其作为插件添加到 Vue 应用中

步骤二:在store文件夹下创建文件(例categoryStore.js),提取请求如下:

步骤三:调用 + 使用

4、导入依赖优化


前言

  • 根目录下创建aip文件夹 + utils文件夹
  • 安装axios:
    npm i axios
  • axios官网:起步 | Axios Docs 

  • 接口文档:接口文档 【都可以使用这个,好像是黑马老师写的,有点记不清了~】【使用自己写的后端项目就更好啦~】

1、axios配置与测试

1.1、配置

        在utils下创建http.js文件,根据官网: 基础配置通常包括:

  1. 实例化 - baseURL + timeout
  2. 拦截器 - 携带token 401拦截等

http.js内容:

import axios from 'axios'

// 1 - 创建axios实例
const http = axios.create({
  baseURL: 'http://pcapi-xiaotuxian-front-devtest.itheima.net',
  timeout: 5000
})

// 2 - axios请求拦截器
// 一般会进行token身份验证等
http.interceptors.request.use(config => {
  return config
}, e => Promise.reject(e))

// 3 - axios响应式拦截器
// 一般进行错误的统一提示,token失效的处理等
http.interceptors.response.use(  
  response => {  
    // 对响应数据做点什么  
    return response.data;  
  },  
  error => {  
    if (error.response) {  
      // 请求已发出,服务器也响应了状态码,但状态码不在 2xx 范围内  
      switch (error.response.status) {  
        case 401:  
          // 未授权,清除 token、跳转到登录页等  
          break;  
        case 404:  
          // 请求的资源不存在  
          break;  
        // 其他状态码...  
      }  
      return Promise.reject(error.response);  
    }  
      
    // 处理网络错误等  
    return Promise.reject(error.message || 'Error');  
  }  
);


export default http

上述代码说明:

  • 创建axios实例:创建时,我们可以修改默认值baseURL,这里我们就是修改为和上面接口一致的url,小伙伴在自己的项目中,需要修改为自己的url哦;timeout就是一个超时最长时间,也就是5s;
  • axios请求拦截器:请求拦截器在请求被发送到服务器之前执行。这里定义了一个拦截器,它接收一个 config 对象(这是请求的配置),然后直接返回它。如果请求出错(例如,由于网络问题),它会返回一个被拒绝的 Promise。在实际应用中,你可能会在这里进行一些预处理操作,例如添加身份验证 token 到请求的 headers 中;
  • axios响应式拦截器:响应拦截器在服务器响应返回后,但在 then 或 catch 被调用之前执行。这里定义的拦截器会提取响应的 data 属性【为什么要这样,因为一般项目中,知道返回正确后,其实我们都是】,并返回它。如果响应出错(例如,由于服务器错误或网络问题),它会返回一个被拒绝的 Promise。在实际应用中,你可能会在这里进行一些后处理操作,例如处理错误消息或 token 失效的情况;
  • 导出实例:http 实例被导出,以便在其他模块中使用;

1.2、测试

步骤一:在api文件夹下创建testAPI.js文件:

import http from '@/utils/http'

export function getCategoryAPI () {
    return http.get('home/category/head')
}

上述的路径是我上面给的接口文档中的哈~

步骤二:在main.js文件中:

getCategoryAPI().then(res => {
    console.log(res);
});

打开页面,刷新可看:


2、使用axios案例-渲染header

实现步骤:

  1. 封装接口函数
  2. 调用接口函数
  3. v-for渲染模版

步骤一:在api文件夹下增加文件layout.js,内容如下:

import http from "@/utils/http";

export function getCategoryAPI(){
    return http.get('home/category/head');
}

步骤二:在需要的地方,进行调用。例如我这里是在header的组件中调用:

<script setup>
import {onMounted, ref} from "vue";
import {getCategoryAPI} from "@/apis/layout";

const categoryList = ref([]);
const getCategory = async ()=>{
  let res = await getCategoryAPI();
  console.log(res.result);
  categoryList.value = res.result;
}
onMounted(()=>{
  getCategory();
})
</script>

步骤三:v-for渲染模版 , 例:

<li v-for="item in categoryList" :key="item.id">
    <RouterLink to="/">{{item.name}}</RouterLink>
</li>

效果,检查是否正确,我们在上面有打印data中的数据,我们来看看:

上面的首页在代码写死的哈,不是后端传的:


3、Pinia优化重复请求

3.1、为什么?

为什么需要优化请求?举例说明:

例如上述我们说的,以及上一篇文章中提到的,一个是header的部分,一个是吸顶部分,例如下图:

这是两个组件,但是中间的标签是一样的,也就是说,我们要写两次请求,请求怎么写这篇文章的目录2已经说了,如下代码需要写两次:

这不就代码冗余了,因此需要进行优化重复请求~

3.2、使用Pinia优化代码步骤

安装pinia:npm install pinia

步骤一:在main.js中创建 Pinia 实例,并将其作为插件添加到 Vue 应用中

如下:

import { createApp } from 'vue'
import App from './App.vue'
import './registerServiceWorker'
import router from './router'
import store from './store'
import '@/styles/var.scss'; 
import '@/styles/icon.css';
import '@/styles/element/index.scss'; 
import { getCategoryAPI } from '@/api/testAPI'
import { createPinia } from 'pinia';
// 创建 Pinia 实例  
const pinia = createPinia(); 
const app = createApp(App).use(store).use(router);
getCategoryAPI().then(res => {
    console.log(res);
});
app.use(pinia); 
app.mount('#app');

步骤二:在store文件夹下创建文件(例categoryStore.js),提取请求如下:

import { ref , onMounted } from 'vue'
import { defineStore } from 'pinia'
import { getCategoryAPI } from '@/api/layout'
                                            //这只是一个名字category
export const useCategoryStore = defineStore('category', () => {
  // 导航列表的数据管理
  // state 导航列表数据
  const categoryList = ref([])

  // action 获取导航数据的方法
  const getCategory = async () => {
    const res = await getCategoryAPI()
    categoryList.value = res.result
  }
  onMounted(()=>getCategory());

  return {
    categoryList,
    getCategory
  }
})

步骤三:调用 + 使用

调用时,代码如下:

import {useCategoryStore} from "@/store/categoryStore";
const categoryStore = useCategoryStore();


4、导入依赖优化

        这个大家可以先按照本系列的文章4:前端项目,个人笔记(四)【Vue-cli 迁移 Vite 】,先更换为vite项目,再操作,因为这个优化我在vue-cli项目中,没有搞成功~

在vite.config.js文件操作:

以上就可以自动导入了,例如我们引入子组件:

文章中其他地方都是一样的,只要在vite.config.js中配置了,都会自动导入~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1530224.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

redis和rabbitmq实现延时队列

redis和rabbitmq实现延时队列 延迟队列使用场景Redis中zset实现延时队列Rabbitmq实现延迟队列 延迟队列使用场景 1. 订单超时处理 延迟队列可以用于处理订单超时问题。当用户下单后&#xff0c;将订单信息放入延迟队列&#xff0c;并设置一定的超时时间。如果在超时时间内用户…

【LabVIEW FPGA入门】使用FPGA实现串行同步接口(SSI)

SSI&#xff08;串行同步接口&#xff09;是连接绝对位置传感器和控制器的广泛应用的串行接口。SSI利用控制器发出一个时钟脉冲序列&#xff0c;初始化传感器的门限输出。 传感器不断更新位置数据&#xff0c;并传送到移位寄存器中。在每一个时钟脉冲序列之间&#xff…

了解常见字符函数

乐观学习&#xff0c;乐观生活&#xff0c;才能不断前进啊&#xff01;&#xff01;&#xff01; 我的主页&#xff1a;optimistic_chen 我的专栏&#xff1a;c语言 点击主页&#xff1a;optimistic_chen和专栏&#xff1a;c语言&#xff0c; 创作不易&#xff0c;大佬们点赞鼓…

.NET 异步编程(异步方法、异步委托、CancellationToken、WhenAll、yield)

文章目录 异步方法异步委托async方法缺点CancellationTokenWhenAllyield 异步方法 “异步方法”&#xff1a;用async关键字修饰的方法 异步方法的返回值一般是Task<T>&#xff0c;T是真正的返回值类型&#xff0c;Task<int>。惯例&#xff1a;异步方法名字以 Asy…

浅析ArcGis中的软件——ArcMap、ArcScene、 ArcGlobe、ArcCatalog

为什么要写这么一篇介绍ArcGis的文章呢&#xff1f;因为大部分人也包括ArcGisdada&#xff0c;在使用ArcMap应用程序创建工程时总以为我们就是使用了ArcGis这个软件的所有。其实不然&#xff0c;在后期的接触和使用中慢慢发现原来ArcMap只是ArcGis这个综合平台的一部分&#xf…

HarmonyOS NEXT应用开发之动态路由

介绍 本示例将介绍如何使用动态路由跳转到模块中的页面&#xff0c;以及如何使用动态import的方式加载模块 使用说明 通过动态import的方式&#xff0c;在需要进入页面时加载对应的模块。配置动态路由&#xff0c;通过WrapBuilder接口&#xff0c;动态创建页面并跳转。动态i…

2024.3.19

思维导图 模拟面试 1.友元的作用 答&#xff1a;通过关键字friend&#xff0c;可以让一些函数或者类&#xff0c;可以访问一个类中的私有数据成员。 2.匿名对象的作用 答&#xff1a;匿名对象就是没有名字的对象&#xff0c;是用来给有名对象进行初始化工作的。 3.常成员函…

【S5PV210】 | GPIO编程

【S5PV210】 | GPIO编程 时间:2024年3月17日22:02:32 目录 文章目录 【`S5PV210`】 | `GPIO`编程目录1.参考2.`DataSheet`2.1.概述2.1.1.特色2.1.2 输入/输出配置2.1.3 `S5PV210` 输入/输出类型2.1.4 IO驱动强度**2.1.4.1 类型A IO驱动强度****2.1.4.2 类型A IO驱动强度****2…

安泰电子:前置微小信号放大器是什么东西

前置微小信号放大器是一种用于放大微弱信号的设备&#xff0c;在电子和通信领域中有广泛的应用。它的主要功能是将输入的微小信号放大到足够的水平&#xff0c;以便后续电路能够准确地测量、处理和分析这些信号。本文将详细介绍前置微小信号放大器的原理、组成部分和应用领域。…

目标检测——PP-PicoDet算法解读

PP-YOLO系列&#xff0c;均是基于百度自研PaddlePaddle深度学习框架发布的算法&#xff0c;2020年基于YOLOv3改进发布PP-YOLO&#xff0c;2021年发布PP-YOLOv2和移动端检测算法PP-PicoDet&#xff0c;2022年发布PP-YOLOE和PP-YOLOE-R。由于均是一个系列&#xff0c;所以放一起解…

AutoSAR配置与实践(深入篇)10.3 CANTP 传输流程和通信示例

AutoSAR配置与实践(深入篇)10.3 CANTP 通信示例 CANTP 通信示例一、诊断传输流程1.1上位机请求流程1.2 ECU反馈流程二、CANTP 通信示例2.1 通信交互详解CANTP 通信示例 ->返回总目录<- 一、诊断传输流程 1.1上位机请求流程 Step 1. Tester(诊断上位机)通过物理总线…

线程,你真的懂了吗?

大家都知道的是线程其实分为的是内核级线程和用户级线程&#xff0c;这几天在看线程的时候&#xff0c;突然有一种感觉不太明白的地方&#xff0c;那就是linux中pthread.h这个库中的线程到底是用户级还是内核级&#xff0c;后来在网上也搜了很多的例子。我自我认为是看不懂的&a…

科技助力高质量发展:新质生产力的崛起与企业数字化转型

引言 随着科技的飞速发展&#xff0c;我们正逐渐步入数字化智能时代&#xff0c;这个时代不仅为企业带来了无限的机遇&#xff0c;也让其面对前所未有的挑战。在这个快速变革的时代&#xff0c;企业必须不断调整自己的经营策略&#xff0c;适应数字化转型的浪潮&#xff0c;以…

阿里云部署MySQL、Redis、RocketMQ、Nacos集群

文章目录 &#x1f50a;博主介绍&#x1f964;本文内容MySQL集群配置云服务器选购CPU选择内存选择云盘选择ESSD AutoPL云盘块存储性能&#xff08;ESSD&#xff09; 镜像选择带宽选择密码配置注意事项 搭建宝塔面板方便管理云服务器云服务器的安全组安装docker和docker-compose…

MyBatis记录

目录 什么是MyBatis MyBatis的优点和缺点 #{}和${}的区别 Mybatis是如何进行分页的&#xff0c;分页插件的原理 Mybatis是如何将sql执行结果封装为目标对象并返回的 MyBatis实现一对一有几种方式 Mybatis设计模式 什么是MyBatis &#xff08;1&#xff09;Mybatis是一个…

Unbuntu20.04 git push和pull相关问题

文章目录 Unbuntu20.04 git push和pull使用&#xff11;&#xff0e;下载[Git工具包](https://git-scm.com/downloads)&#xff12;&#xff0e;建立本地仓库&#xff13;&#xff0e;将本地仓库与github远程仓库关联&#xff14;&#xff0e;将本地仓库文件上传到github远程仓…

Tcl学习笔记(一)——环境搭建及基本语法

一、Tcl简介 TCL&#xff08;Tool Command Language&#xff0c;即工具命令语言&#xff09;是一种解释执行的脚本语言。所谓解释执行语言&#xff0c;是指其不需要通过编译和联结&#xff0c;而是直接对每条语句进行顺序解释、执行。 TCL包含语言和工具库&#xff0c;TCL语言主…

Modbus TCP转Profinet网关如何实现Modbus主站与多设备通讯

在工业控制领域中&#xff0c;Modbus TCP转Profinet网关&#xff08;XD-ETHPN20&#xff09;扮演着连接不同设备间通讯的重要角色。当将Modbus主站与十几台服务器进行通讯时&#xff0c;通过modbus tcp转profinet网关&#xff08;XD-ETHPN20&#xff09;设备将不同协议间的数据…

【YOLOv5改进系列(2)】高效涨点----Wise-IoU详细解读及使用Wise-IoU(WIOU)替换CIOU

WIOU损失函数替换 &#x1f680;&#x1f680;&#x1f680;前言一、1️⃣ Wise-IoU解读---基于动态非单调聚焦机制的边界框损失1.1 &#x1f393; 介绍1.2 ✨WIOU解决的问题1.3 ⭐️论文实验结果1.4 &#x1f3af;论文方法1.4.1☀️Wise-IoU v11.4.2☀️Wise-IoU v21.4.3☀️…

PySpark案例实战

一、前言介绍 二、基础准备 # 导包 from pyspark import SparkConf,SparkContext #创建SparkConf类对象 confSparkConf().setMaster("local[*]").setAppName("test_spark_app") #基于SparkXConf类对象创建SparkContext对象 scSparkContext(confconf) #打印…