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

目录

前言

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.mzph.cn/news/756634.shtml

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

相关文章

3703. 括号的匹配 北京师范大学考研上机真题 栈的思想

在算术表达式中&#xff0c;除了加、减、乘、除等运算外&#xff0c;往往还有括号。 包括有大括号 {}&#xff0c;中括号 []&#xff0c;小括号 ()&#xff0c;尖括号 <> 等。 对于每一对括号&#xff0c;必须先左边括号&#xff0c;然后右边括号&#xff1b;如果有多个…

2024年数据隐私将成为定义科技问题的关键问题。

数据隐私&#xff1a;2024年科技领域的核心议题 引言 随着人工智能&#xff08;AI&#xff09;技术的飞速发展&#xff0c;如ChatGPT等AI驱动的聊天机器人正在重塑我们熟知的行业。然而&#xff0c;每一次技术的进步&#xff0c;都伴随着传统角色的消逝。2023年6月&#xff0…

初识数据库|数据库的特点、分类以及作用

数据库系统&#xff08;DateBase System&#xff0c;简称DBS&#xff09;是指在计算机系统中引入数据库后的系统构成&#xff0c;由计算机硬件&#xff0c;操作系统&#xff0c;DBMS&#xff0c;DB&#xff0c;应用程序和用户以及数据库开发和管理人员等组成。 &#xff08;一…

C#基础语法学习笔记(传智播客学习)

最近在学习C#开发知识&#xff0c;跟着传智播客的视频学习了一下&#xff0c;感觉还不错&#xff0c;整理一下学习笔记。 C#基础语法学习笔记 1.背景知识2.Visual Studio使用3.基础知识4.变量5.运算符与表达式6.程序调试7.判断结构8.循环结构9.常量、枚举类型10.结构体类型11.数…

[BT]BUUCTF刷题第一天(3.19)

第一天&#xff08;共4题&#xff09; Web [极客大挑战 2019]EasySQL Payload&#xff1a; 用户名&#xff1a;admin or 11# &#xff08;密码也可以改成这个&#xff09; 密码&#xff1a;1&#xff08;可任意&#xff09; 网站漏洞代码&#xff1a; sql"select *…

Android和IOS Flutter应用开发使用 Provider.of 时,可以使用 listen: false 来避免不必要的重建

文章目录 listen: false解释示例 listen: false 使用 Provider.of 时&#xff0c;可以使用 listen: false 来避免不必要的重建 解释 当您使用 Provider.of 获取状态对象时&#xff0c;默认情况下&#xff0c;该对象每次发生变化时都会触发重建该对象所在的组件。这在大多数情…

云平台一键迁移(腾讯云windos服务器迁移到阿里云windos服务器)

参考文档 https://help.aliyun.com/zh/smc/use-cases/one-click-cloud-platform-migration 迁移文档 https://cloud.tencent.com/document/product/598/37140 #腾讯密钥创建 https://cloud.tencent.com/document/product/1340/51945 安装腾讯云自动化服务助手 一.导入迁移…

adb的使用(安装apk和传输文件)

adb命令安装apk包 先传apk adb pull /tmp/app-test.apk /data/local/tmp/ 指定文件安装 adb install apk路径 adb命令传输文件 1.从手机端将文件传输到电脑 1&#xff09;在电脑端打开文件将要存储的路径&#xff0c;按住shift键右击&#xff0c;选择“在此处打开命令窗口…

GitHub gpg体验

文档 实践 生成新 GPG 密钥 gpg --full-generate-key查看本地GPG列表 gpg --list-keys关联GPG公钥与Github账户 gpg --armor --export {key_id}GPG私钥对Git commit进行签名 git config --local user.signingkey {key_id} # git config --global user.signingkey {key_id} git…

JVM常用垃圾收集器

JVM 4.1 哪些对象可以作为GC ROOT? 虚拟机栈&#xff08;栈帧中的局部变量表&#xff09;中引用的对象本地方法栈中引用的对象方法区静态变量引用的对象方法区常量引用的对象被同步锁持有的对象JNI&#xff08;Java Native Interface&#xff09;引用的对象 4.2 常用垃圾收集…

计算机二级(Python)真题讲解每日一题:《方菱形》

描述‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬ 请写代码替换横线&#xff0…

golang踩坑记录

1. server gave HTTP response to HTTPS client 出现场景&#xff0c;http包get请求https的 原代码 response, err : http.Get(fmt.Sprintf("https://%v/api/user/secret/?name%v&password%v", djang_ip, username, password))修改后 有地方说go的版本问题&…

accessToken

1、介绍 accessToken&#xff0c;通常是用于身份验证和授权的令牌,它可以用于前端和后端&#xff0c;具体使用方式取决于应用程序的架构和需求。 前端应用 accessToken通常用于向后端API发送请求时进行身份验证和授权。 &#xff08;1&#xff09;前端应用程序会在用户登录成…

boost的ptree比qt的接口更适合读写xml,因为它舍弃了结点属性,里面只有根节点和子节点,显得更简洁

就6个接口&#xff1a; 写xml文件 boost::property_tree::ptree 动物园; add<std::string>("名字", "苹果"); add_chile("水果类型",水果);// 读取 XML 文件 boost::property_tree::read_xml("example.xml", pt); get_child()&…

描述我处理过的一个性能优化问题如何实现Web应用的负载均衡?

一、描述我处理过的一个性能优化问题 在我过去的工作经历中&#xff0c;我遇到并成功解决了一个性能优化问题。这个问题发生在一个电商网站的后台管理系统中&#xff0c;当管理员尝试查询大量订单数据时&#xff0c;系统的响应速度非常慢&#xff0c;有时甚至导致页面超时或崩…

SpringCloud入门(1) Eureka Ribbon Nacos

这里写目录标题 认识微服务SpringCloud 服务拆分和远程调用服务拆分案例实现远程调用 RestTemplate Eureka注册中心Eureka的结构和作用搭建eureka-server服务注册服务发现 Ribbon负载均衡 LoadBalancedLoadBalancerIntercepor源码解析负载均衡策略饥饿加载 Nacos注册中心安装与…

不同环境迁移和hive等不同数据源迁移数据到Doris的解决方案

1、Doris不同开发环境迁移 在项目开发时,需要开发环境、测试环境、uat环境、预生产环境、生产环境。常常遇到这样的场景:需要把某个环境的所有表结构和数据都迁移到某个环境。手动去操作是耗时耗力的,这时需要通过代码或工具来高效执行。 1.1 使用代码进行迁移表结构 /***…

PySpark案例实战

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

GC垃圾回收的算法

GC&#xff08;垃圾回收&#xff09;的算法有多种&#xff0c;每种都有其特点和适用场景。以下是一些常见的GC算法&#xff0c;并举例进行说明&#xff1a; 引用计数算法&#xff1a; 原理&#xff1a;为每个对象维护一个引用计数器&#xff0c;每当有一个地方引用这个对象时&a…

Arduino RP2040 多核心运行模式

Arduino RP2040 多核心运行模式 &#x1f4cc;RP2040基于Earle F. Philhower, III的开发核心固件&#xff1a;https://github.com/earlephilhower/arduino-pico/releases/download/global/package_rp2040_index.json&#x1f388;相关开发文档在线j简要介绍&#xff1a;https:/…