1、什么是 Axios?

        Axios​ 是一个基于 ​Promise​ 的 ​HTTP 客户端,用于浏览器和 Node.js 环境,用来发送 ​HTTP 请求(如 GET、POST、PUT、DELETE 等)​。

        它常用于:

  • 向后台 API 发送请求获取数据
  • 提交表单数据
  • 上传文件
  • 与 RESTful API 进行交互

        在 ​Vue.js​项目中,Axios 是最流行、最推荐的 HTTP 请求库之一,用来替代原生 fetch,因为它功能更强大、使用更方便、支持拦截器、取消请求等高级功能。

        中文网地址:axios中文网|axios API 中文文档 | axios

2、Axios特性

  • 从浏览器中创建XMLHttpRequests
  • 从 node.js 创建http请求
  • 支持 Promise API
  • 拦截请求和响应
  • 转换请求数据和响应数据
  • 取消请求
  • 自动转换 JSON 数据
  • 客户端支持防御XSRF

3、Axios下载        

        1、使用 npm 安装
npm install axios
        2、使用 yarn 安装
yarn add axios
        3、直接通过 CDN 引入
<script src="https://cdn.jsdelivr.net/npm/axios/dist/axios.min.js"></script>
        4、下载Js文件

                 Gitee下载地址:https://gitee.com/mirrors/axios

4、Axios 的基本用法

        1.、发送 GET 请求
import axios from 'axios'// 方式1:直接使用 then/catch
axios.get('https://localhost:8081/list/1').then(response => {console.log('获取的数据:', response.data)}).catch(error => {console.error('请求出错:', error)})// 方式2:使用 async/await(推荐)
async function fetchData() {try {const response = await axios.get('https://localhost:8081/list/1')console.log('获取的数据:', response.data)} catch (error) {console.error('请求失败:', error)}
}fetchData()
        2、发送 POST 请求
axios.post('https://localhost:8081/list', {title: 'Hello Axios',body: 'This is a post sent by Axios',userId: 1
}).then(response => {console.log('创建成功:', response.data)}).catch(error => {console.error('创建失败:', error)})
        3、执行多个并发请求
function getUserAccount() {return axios.get('/user/12345');
}function getUserPermissions() {return axios.get('/user/12345/permissions');
}axios.all([getUserAccount(), getUserPermissions()]).then(axios.spread(function (acct, perms) {// 两个请求现在都执行完成}));
        4、带参数的 GET 请求(Query 参数)
axios.get('https://localhost:8081/posts', {params: {userId: 1}
}).then(response => {console.log(response.data) // 获取 userId 为 1 的所有文章})//实际请求的 URL 类似:
//https://localhost:8081/posts?userId=1

5、Axios 常用配置项

        在发送请求时,可以传入一个 ​配置对象,常用选项包括:

axios({method: 'post',                  // 请求方法:get, post, put, delete 等url: '/user/12345',              // 请求地址data: {                          // 请求体(通常用于 POST、PUT)firstName: 'John',lastName: 'Doe'},params: {                        // URL 查询参数(GET 参数)ID: 12345},headers: {                       // 自定义请求头'X-Custom-Header': 'foobar'},timeout: 5000                    // 请求超时时间(毫秒)
})

6、Axios 实例

        通常我们不会直接使用全局的 axios,而是创建一个 ​Axios 实例,这样可以:

  • 设置 ​基础 URL​
  • 设置 ​默认请求头(如 Token)​​
  • 统一的 ​超时时间​
  • 更好的 ​模块化管理

        创建实例

import axios from 'axios'// 创建一个 axios 实例
const api = axios.create({baseURL: 'https://localhost:8081', // 基础路径timeout: 5000, // 请求超时时间headers: { 'Content-Type': 'application/json' }
})

        使用实例发送请求

// GET
api.get('/posts/1').then(response => {console.log(response.data)})// POST
api.post('/posts', {title: 'Hello',body: 'World',userId: 1
})

7、请求 & 响应拦截器

        在请求发出去之前或收到响应之后,统一做一些处理,比如:

  • 添加 token 到请求头
  • 统一处理错误
  • 加载状态控制
        1、请求拦截器(Request Interceptor)
api.interceptors.request.use(config => {// 在发送请求之前做些什么const token = localStorage.getItem('token')if (token) {config.headers.Authorization = `Bearer ${token}`}console.log('请求配置:', config)return config // 必须返回 config},error => {// 请求错误时做些什么return Promise.reject(error)}
)
        2、响应拦截器(Response Interceptor)
api.interceptors.response.use(response => {// 对响应数据做点什么,比如只返回 data 部分return response.data // 直接返回数据部分,简化后续处理},error => {// 对响应错误做点什么if (error.response) {switch (error.response.status) {case 401:console.error('未授权,请登录')breakcase 404:console.error('请求资源不存在')breakcase 500:console.error('服务器错误')breakdefault:console.error('请求错误:', error.response.status)}} else {console.error('网络或未知错误:', error.message)}return Promise.reject(error)}
)

8、在 Vue 项目中使用 Axios

        在实际的 Vue 项目中,通常会:

                ​1、封装 axios​(创建实例 + 拦截器)

                2、在 main.js 或插件中全局挂载(可选)​​

                3、在组件或 API 模块中调用

        项目结构:

src/
├── api/
│   └── user.js       # 用户相关的接口
├── utils/
│   └── request.js    # axios 实例和基础配置
└── components/└── ...
        1、创建 axios 实例(utils/request.js)
// utils/request.js
import axios from 'axios'const request = axios.create({baseURL: 'https://localhost:8081', // 你的 API 地址timeout: 5000
})// 请求拦截器
request.interceptors.request.use(config => {const token = localStorage.getItem('token')if (token) {config.headers.Authorization = `Bearer ${token}`}return config},error => Promise.reject(error)
)// 响应拦截器
request.interceptors.response.use(response => response.data, // 直接返回数据部分error => {console.error('请求出错:', error)return Promise.reject(error)}
)export default request
        2、封装 API 请求(api/user.js)
// api/user.js
import request from '@/utils/request'// 获取用户信息
export function getUser(id) {return request.get(`/users/${id}`)
}// 创建用户
export function createUser(data) {return request.post('/users', data)
}
        3、在 Vue 组件中使用
<template><div><button @click="fetchUser">获取用户</button><p v-if="user">用户名: {{ user.name }}</p></div>
</template><script>
import { getUser } from '@/api/user'export default {data() {return {user: null}},methods: {async fetchUser() {try {const res = await getUser(1) // 获取 ID 为 1 的用户this.user = res} catch (error) {console.error('获取用户失败:', error)}}}
}
</script>

9、Vue 3 Composition API 中使用 Axios

        如果使用 Vue 3 的 <script setup>,代码会更简洁:

<script setup>
import { ref } from 'vue'
import { getUser } from '@/api/user'const user = ref(null)const fetchUser = async () => {try {const res = await getUser(1)user.value = res} catch (error) {console.error('获取失败', error)}
}
</script><template><button @click="fetchUser">获取用户</button><p v-if="user">用户名: {{ user.name }}</p>
</template>

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

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

相关文章

Ubuntu 软件源版本不匹配导致的依赖冲突问题及解决方法

在使用 Ubuntu 系统的过程中&#xff0c;软件包管理是日常操作的重要部分。但有时我们会遇到各种依赖冲突问题&#xff0c;其中软件源与系统版本不匹配是常见且棘手的一种。本文就来详细分享一次因软件源版本不匹配引发的依赖冲突问题&#xff0c;以及具体的解决思路和流程。一…

思考:高速场景的行星轮混动效率如何理解

行星轮混动 E-CVT&#xff08;电子无级变速器&#xff09;是一种专为混合动力汽车设计的动力分配系统&#xff0c;其核心原理是通过行星齿轮组和电机的协同工作&#xff0c;实现动力分流与无级变速。 一、核心结构与组成 E-CVT的核心部件包括 行星齿轮组 和 双电机&#xff08;…

跨域及解决方案

跨域&#xff08;Cross-Origin&#xff09;是指浏览器在执行 JavaScript 的时候&#xff0c;因为同源策略&#xff08;Same-Origin Policy&#xff09;的限制&#xff0c;阻止了一个网页去请求不同源&#xff08;域名、端口、协议有任意一个不同&#xff09;的资源。 1. 什么是…

PCA降维全解析:从原理到实战

一文读懂PCA降维&#xff1a;原理、实现与可视化全解析​本文6000字&#xff0c;涵盖PCA核心原理、数学推导、代码实战及高频面试题&#xff0c;建议收藏阅读​一、为什么需要降维&#xff1f;数据爆炸时代的生存法则当数据集的特征维度激增&#xff08;如基因数据、推荐系统用…

Kafka工作机制深度解析:Broker、Partition 与消费者组协作原理

&#x1f42f; Kafka工作机制深度解析&#xff1a;Broker、Partition 与消费者组协作原理 &#x1f3c1; 前言 Kafka 已成为互联网公司流式数据处理的事实标准&#xff0c;广泛应用于日志收集、实时计算、事件驱动架构等场景。 很多开发者会用 Kafka&#xff0c;但不了解它底…

深入解析live555:开源流媒体框架的技术原理与应用实践

引言&#xff1a;流媒体领域的"老兵"与技术基石 在实时音视频传输技术的发展历程中&#xff0c;live555作为一款诞生于1990年代末的开源项目&#xff0c;至今仍在流媒体服务器、嵌入式设备和安防监控等领域发挥着不可替代的作用。它由Live Networks公司开发并维护&a…

EN55014家用电器、电动工具和类似设备的电磁兼容

一、EN 55014标准定义与属性&#xff1f;EN 55014 是针对家用电器、电动工具及类似设备的电磁兼容&#xff08;EMC&#xff09;标准&#xff0c;主要规定了这类产品在电磁骚扰发射&#xff08;避免干扰其他设备&#xff09;和抗扰度&#xff08;抵抗其他设备干扰&#xff09;方…

python自学笔记9 Seaborn可视化

Seaborn&#xff1a;统计可视化利器 作为基于 Matplotlib 的高级绘图库&#xff0c;有一下功能&#xff1a;一元特征数据 直方图 import matplotlib.pyplot as plt import pandas as pd import seaborn as sns # import os # # 如果文件夹不存在&#xff0c;创建文件夹 # if…

kafka 消费者组的概念是什么?它是如何实现消息的点对点和发布/订阅模式?

Kafka 消费者组&#xff08;Consumer Group&#xff09;是 Kafka 架构中的核心概念&#xff0c;它是一组共同协作来消费一个或多个主题&#xff08;Topic&#xff09;数据的消费者应用的集合。 通过简单地为多个消费者实例配置相同的 group.id&#xff0c;它们就组成了一个消费…

C#文件复制异常深度剖析:解决“未能找到文件“之谜

一个看似简单的文件操作问题 在C#开发中&#xff0c;文件操作是基础中的基础&#xff0c;但有时最基础的File.Copy()方法也会抛出令人困惑的异常。最近我遇到了这样一个问题&#xff1a; File.Copy(sourceFile, targetFilePath);当targetFilePath设置为D:\25Q1\MR3.6.6.1_C1.2.…

OpenCV Python——图像查找(特征匹配 + 单应性矩阵)

1 图像查找&#xff08;单应性矩阵&#xff09;2 单应性矩阵 应用举例3 单应性矩阵 代码示例P87 111 图像查找&#xff08;单应性矩阵&#xff09; 特征匹配作为输入&#xff0c;获得单应性矩阵 点X在img1和img2中的成像分别为x,x 图中H即为单应性矩阵 2 单应性矩阵 应用…

Ubuntu 安装带证书的 etcd 集群

1.概念 etcd 是由GO语言编写的分布式的、可靠的键值存储系统&#xff0c;主要用于分布式系统中关键数据的存储和服务发现。 2.核心概念 节点&#xff08;Node&#xff09; 每个运行 etcd 的实例被称为一个节点。一个或多个节点可以组成一个集群。 集群&#xff08;Cluster&…

360 集团20周年会:战略升级ALL IN Agent,抢占智能体时代先机

发布 | 大力财经8月15日&#xff0c;360集团迎来二十周年&#xff0c;在北京奥林匹克体育中心举办的“360集团20周年荣耀庆典”上&#xff0c;创始人周鸿祎向现场数千名员工发表演讲&#xff0c;回顾360集团二十年的发展历程&#xff0c;并明确360集团下一阶段的公司战略&#…

命令模式C++

命令模式&#xff08;Command Pattern&#xff09;是一种行为型设计模式&#xff0c;它将请求封装为一个对象&#xff0c;使你可以用不同的请求对客户进行参数化&#xff0c;还能支持请求的排队、记录日志及撤销操作。这种模式将发送者和接收者解耦&#xff0c;发送者无需知道接…

Web攻防-大模型应用LLM搭建接入第三方内容喂养AI插件安全WiKI库技术赋能

知识点&#xff1a; 1、WEB攻防-LLM搭建-AI喂养&安全知识WIKI库 演示案例&#xff1a;WEB攻防-LLM搭建-AI喂养&安全知识WIKI库 使用参考 https://docs.web2gpt.ai/ https://mp.weixin.qq.com/s/qqTOW5Kg1v0uxdSpbfriaA 0、服务器环境&#xff1a;阿里云 Ubuntu22.04 …

图片拼接-动手学计算机视觉8

前言图片拼接&#xff08;image stitching&#xff09;就是将统一场景的不同拍摄出的图片拼接到一起&#xff0c;如图所示就是拼接全景图&#xff0c;是图片拼接的应用之一&#xff0c;手机拍照都有全景拍摄功能仔细观察全景图&#xff0c;寻找它们相似性&#xff0c;图8-2的全…

Web第二次作业

作业一&#xff1a;学校官网1.1学校官网代码如下&#xff1a;​<!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0">&l…

【CV 目标检测】②R-CNN模型

二、R-CNN网络基础 2.R-CNN模型 2014年提出R-CNN&#xff01;网络&#xff0c;该网络不再使用暴力穷举的方法&#xff0c;而是使用候选区域方法&#xff08;region proposal method&#xff09;创建目标检测的区域来完成目标检测的任务&#xff0c;R-CNN是以深度神经网络为基础…

STM32L051C8与STM32L151C8的主要区别

STM32L051C8与STM32L151C8 有什么区别&#xff1f; LPTIM 有什么特点,为什么STM32L151C8没有LPTIM,而STM32L051C8有1个? 1. STM32L051C8与STM32L151C8的主要区别 STM32L051C8STM32L151C8内核Cortex-M0Cortex-M3主频32MHz32MHz闪存/ SRAM64KB/8KB64KB/16KB工作电压1.65V-3.6V…

【软考中级网络工程师】知识点之网关协议深度剖析

目录一、网关协议基础探秘1.1 网关协议概念1.2 网关协议作用1.3 网关协议分类总览二、内部网关协议&#xff08;IGP&#xff09;深度解析2.1 距离矢量协议2.2 链路状态协议2.3 混合型协议三、外部网关协议&#xff08;EGP&#xff09;探秘3.1 BGP 协议详解3.2 BGP 协议的关键特…