AXIOS的引入和封装

embedded/2025/1/17 11:52:01/

        Axios 是一个用于在浏览器和 Node.js 中进行 HTTP 请求的流行库。以下是 Axios 的基本使用说明,包括安装和定义。

一、安装

pnpm add axios

二、使用

import axios from 'axios';
axios.get('http://139.186.166.35:3001/api/testGet').then(response => {console.log('Response:', response.data);}).catch(error => {console.error('Error:', error.message);});axios.post('http://139.186.166.35:3001/api/testPost', postData).then(response => {console.log('Response:', response.data);}).catch(error => {console.error('Error:', error.message);});

三、axios的使用方法补充

axios除了直接使用它实例上的方法,还可以通过配置的方式进行使用axios({}),传入一个对象,这个对象可以有如下属性:

  1. url(字符串): 请求的 URL。
  2. method(字符串): 请求的 HTTP 方法,例如 'get''post'等。
  3. params(对象): 请求的 URL 参数,会被添加到 URL 后面,Get请求参数
  4. data(对象): 请求的数据,通常用于 POST 请求的请求体,post请求参数
  5. headers(对象): 请求头,可以设置各种头信息,例如 'Content-Type''Authorization'等。
  6. timeout(数字): 请求超时时间,单位是毫秒。
  7. baseURL(字符串): 将被添加到 url 前面的基础 URL。
    axios({url:'http://139.186.166.35:3001/api/getUserName',method:'get',params:{id:1},timeout: 10000,headers: {'Content-Type': 'application/json'// 这里还可以设置其他的请求头}
    })axios({url:'http://139.186.166.35:3001/api/createUser',method:'post',data:{id:1},timeout: 10000,headers: {'Content-Type': 'application/json'// 这里还可以设置其他的请求头}
    })

表示请求类型有误,检查请求类型

如果如上使用axios,会出现一个问题,有一些配置项,会被重复书写,所以我们可以使用axios.create这个方法,来创建一个axios的实例,将配置项配置到实例里,这样,我们就可以不用每次都重复去写配置项了,而是每次请求直接使用这个axios创建的实例就ok。

const instance = axios.create({baseURL: "http://139.186.166.35:3001", // 设置基本的 URLtimeout: 5000, // 设置超时时间,单位是毫秒
});
function getData() {instance({method: "get",url: "/api/getUserName",params: { id: "1" },}).then((res) => {console.log(res);});
}
getData();

四、axios的封装

axios企业级使用一般会做三层封装

第一层是工具层:封装axios请求实例,统一配置项,并暴露给其他模块使用

第二层是请求层:封装请求的接口和请求的函数

第三层是应用层:组件页面的使用

工具层axios的实例,我们一般都会封装到项目中的src/utils/request.js里面,然后需要用到的地方,直接import来用

// src/utils/request.js
import axios from "axios";const axiosInstance = axios.create({timeout: 10000,baseURL: "http://139.186.166.35:3001",
});export default axiosInstance;

五、请求层请求的统一封装

在axios封装了以后,我们就可以不让axios的实例散落在项目中的各处,但是还有一个问题亟待解决,那就是我们的请求地址,散落到了项目中的各个地方,那么,怎么解决呢?那就是对他们进行封装,把他们按类型、模块进行归档,我们一般会在项目中新增 src/services/中新增我们各个模块的请求

// src/services/menu.js
import request from "../utils/request.js";const api = {getMenuList: "/api/getUserList",
};export const getMenuList = (params = {}) => {return request({ method: "get", params });
};

这样封装好了以后我们就可以在其他地方直接使用就可以

import {getMenuList} from '../services/menu.js'getMenuList().then(res => console.log(res))

proxy 代理解决跨域问题

一般情况数据是浏览器访问服务器。使用代理之后,相当于浏览器访问本地起的服务器 http://localhost:5173/,然后,本地的代理服务去访问远程的服务器,获得数据之后再返给浏览器

//根目录下面的vite.config.js
import { defineConfig } from 'vite'
import vue from '@vitejs/plugin-vue'// https://vite.dev/config/
export default defineConfig({plugins: [vue()],server:{//本地服务配置port:8000,//本地跑服务的端口号proxy:{//代理配置// 键值对的方式配置代理访问// 键名就是再工具层 配置的baseURL'/apis':{target:'http://139.186.166.35:3001',//远程服务器地址changeOrigin:true,//是否允许跨域rewrite:(path) => path.replace(/^\/apis/, '') //重写地址栏的数据  path代表路径  replace是将地址中 /apis  换成 ''}}}
})//工具层函数
// 1.工具层封装
// 封装axios的请求实例
// 1.映入axios
import axios from 'axios'
// 2.创建实例
const instance = axios.create({// baseURL:'http://139.186.166.35:3001',//服务器地址// 代理访问baseURL:'/apis',timeout:10000
})
// 3.暴露出这个实例
export default instance

六、使用async和await来优化请求

在es6发布的时候,引入了promise,得到了前端开发者的认同,但是在用了一段时间,这种偏异步的写法总是会造成很大的心智负担,大家总会考虑,.then内部是否应该返回一个值,下一个.then内部是否拿到的是一个promise等等

所以就有人提出,是否有一种可能,我们可以把异步的方法,当成同步来写呢?async await语法糖就应运而生

翻译:async,异步的、await,等待,他们结合起来就可以让异步操作变成同步

import {getMenuList} from '../services/menu.js'
// 没用之前
function getData(){getMenuList().then(res => console.log(res))
}
// 用了以后
async function getData2(){const res = await getMenuList()console.log(res)
}

http://www.ppmy.cn/embedded/154646.html

相关文章

如何实现工作流自动化?实用案例分享

一、CI/CD 与自动化运维概述 (一)CI/CD 概念解析 在软件开发领域,CI/CD 是两个极为重要的实践,分别代表持续集成(Continuous Integration)和持续交付 / 持续部署(Continuous Delivery/Continuou…

Golang——包的循环引用问题(import cycle not allowed)和匿名导入

本文详细介绍Golang中包的循环引用问题(import cycle not allowed)和匿名导入问题。 文章目录 循环引用问题优势设计原因解决方法 明确导入的包必须使用匿名导入 补充不允许隐式类型转换 循环引用问题 Go 的设计哲学是避免复杂的循环依赖,从而强制开发者更清晰地思…

标准Android开发jdk和gradle和gradle AGP和AndroidStudio对应版本

还在为用什么gradle版本烦恼吗?编译不过IDE不开始下载第三方库吗?是时候匹配下你的gradle编译版本了: 1.Gradle 各版本支持的 JDK 版本范围如下: Gradle 版本最低支持 JDK最高支持 JDK7.0 - 7.6JDK 8JDK 178.0 - 8.2JDK 11JDK 1…

基于单片机的智能输液系统

研究智能输液系统具有深远的意义。首先,从患者角度来看,智能输液系统能够确保输液过程的稳定性和安全性,减少了因人为操作失误而引发的医疗事故,从而提升了患者的治疗效果和满意度。其次,从医护人员角度来看&#xff0…

shell练习(3)

源码编译安装httpd 2.4,提供系统服务管理脚本并测试 (建议两种方法实现) 下载链接:https://dlcdn.apache.org/httpd/httpd-2.4.62.tar.gz 先装C 和 C 编程中常用的工具 [rootopenEuler-22 ~]# yum install gcc gcc-c make -y再查看…

更新用户密码功能

总说 过程参考黑马程序员SpringBoot3Vue3全套视频教程,springbootvue企业级全栈开发从基础、实战到面试一套通关_哔哩哔哩_bilibili 又是写了一半开始懒散不想写了,9天没写了。 博客仅记录过程,可能解释不详细,因为我也有点一知…

GIS大模型:三维重建与建模

文章目录 数据收集预处理特征提取深度估计点云生成表面重建纹理映射大模型的角色 大模型在三维重建与建模方面,尤其是在处理低空地图数据时,展现了其强大的能力。通过使用深度学习算法,特别是那些基于卷积神经网络(CNNs&#xff0…

PHP智慧小区物业管理小程序

🌟智慧小区物业管理小程序:重塑社区生活,开启便捷高效新篇章 🌟 智慧小区物业管理小程序是一款基于PHPUniApp精心雕琢的智慧小区物业管理小程序,它犹如一股清新的科技之风,吹进了现代智慧小区的每一个角落…