Axios 相关的面试题

在跟着视频教程学习项目的时候使用了axios发送请求,但是只是跟着把代码粘贴上去,一些语法规则根本不太清楚,但是根据之前的博客学习了fetch了之后,一看axios的介绍就明白了。所以就直接展示axios的面试题吧


本文主要内容:

  • Axios 基本用法(GET/POST/PUT/DELETE、拦截器、超时、取消请求)

  • Axios vs Fetch 区别

  • 为什么要二次封装 Axios,如何封装

  • 在 Vue/React 项目中的实践

  • 文件上传、请求重试、高级优化

📌 1. Axios 基础问题

Q1:Axios 是什么?它的特点是什么?

💡 回答要点

Axios 是一个 基于 Promise 的 HTTP 客户端,用于发送 HTTP 请求,支持浏览器和 Node.js。

特点

  • 自动解析 JSONresponse.data 直接返回 JSON)
  • 拦截器(Interceptors)(可以在请求/响应前后进行处理)
  • 支持取消请求CancelToken
  • 支持超时设置timeout 参数)
  • 支持请求并发控制axios.all()
  • 自动携带 Cookies(支持 withCredentials

Q2:Axios 和 Fetch 有什么区别?

💡 回答要点
对比项AxiosFetch
自动解析 JSON✅ 是,response.data 直接是 JSON❌ 需要手动 response.json()
请求/响应拦截器✅ 支持❌ 需要手动封装
超时设置timeout 选项❌ 需要 AbortController 实现
取消请求CancelToken❌ 需要 AbortController
错误处理catch 直接捕获 HTTP 错误❌ 需检查 response.ok
默认携带 Cookies✅ 是❌ 需 credentials: 'include'

👉 Axios 更易用,适用于企业级项目,Fetch 适合轻量级需求。


📌 2. Axios 高级用法

Q3:如何在 Axios 里发送 GET/POST/PUT/DELETE 请求?

💡 回答要点
// GET 请求
axios.get('/api/users').then(response => console.log(response.data));// POST 请求
axios.post('/api/users', { name: "Alice" }).then(response => console.log(response.data));// PUT 请求
axios.put('/api/users/1', { name: "Updated Alice" }).then(response => console.log(response.data));// DELETE 请求
axios.delete('/api/users/1').then(response => console.log("Deleted"));

Q4:如何在 Axios 里设置请求头?

💡 回答要点
axios.get('/api/data', {headers: { 'Authorization': 'Bearer token123' }
}).then(response => console.log(response.data));

Q5:如何使用 Axios 进行并发请求?

💡 回答要点

可以使用 axios.all() 进行多个请求并发处理:

axios.all([axios.get('/api/user'),axios.get('/api/orders')
]).then(axios.spread((userRes, ordersRes) => {console.log(userRes.data, ordersRes.data);
}));

Q6:如何取消 Axios 请求?

💡 回答要点

使用 CancelToken 取消请求:

const CancelToken = axios.CancelToken;
const source = CancelToken.source();axios.get('/api/data', { cancelToken: source.token }).then(response => console.log(response.data)).catch(error => {if (axios.isCancel(error)) {console.log("Request canceled", error.message);}});// 取消请求
source.cancel("Request aborted by user");

Q7:如何在 Axios 里设置超时?

💡 回答要点
axios.get('/api/data', { timeout: 5000 }) // 5 秒超时.then(response => console.log(response.data)).catch(error => console.error("Timeout or request error:", error));

📌 3. Axios 二次封装相关问题

Q8:为什么要对 Axios 进行二次封装?

💡 回答要点
  1. 减少代码重复(比如每次请求都要加 headers
  2. 统一错误处理(拦截所有错误,防止每次 catch
  3. 自动添加 Token(可以在拦截器里统一添加)
  4. 支持自定义请求实例(可创建不同 baseURL 的 Axios 实例)
  5. 提高可维护性(项目规模变大后更容易管理)

Q9:如何对 Axios 进行二次封装?

💡 回答要点

📌 1️⃣ 创建 axiosInstance

import axios from 'axios';// 创建 Axios 实例
const axiosInstance = axios.create({baseURL: "https://api.example.com",timeout: 10000, // 超时 10sheaders: { "Content-Type": "application/json" }
});// 添加请求拦截器(请求前统一处理)
axiosInstance.interceptors.request.use(config => {const token = localStorage.getItem("token");if (token) {config.headers.Authorization = `Bearer ${token}`;}return config;
}, error => Promise.reject(error));// 添加响应拦截器(统一错误处理)
axiosInstance.interceptors.response.use(response => {return response.data;  // 直接返回 data,避免每次 `response.data`
}, error => {console.error("API Error:", error.response?.status, error.message);return Promise.reject(error);
});export default axiosInstance;

📌 2️⃣ 使用封装的 axiosInstance

import axiosInstance from './axiosInstance';axiosInstance.get("/users").then(data => console.log(data)).catch(error => console.error("Request failed:", error));

Q10:如何在 Vue/React 项目中使用封装后的 Axios?

💡 回答要点

在 Vue/React 项目中,可以在 api 目录下创建一个 request.js 进行二次封装。

📌 Vue 里使用

import axiosInstance from './axiosInstance';export function getUserList() {return axiosInstance.get('/users');
}// 在 Vue 组件中使用
getUserList().then(users => console.log(users));

📌 React 里使用

import React, { useEffect, useState } from "react";
import axiosInstance from "./axiosInstance";function UserList() {const [users, setUsers] = useState([]);useEffect(() => {axiosInstance.get("/users").then(setUsers);}, []);return <ul>{users.map(user => <li key={user.id}>{user.name}</li>)}</ul>;
}export default UserList;

📌 4. 高级问题

Q11:如何使用 Axios 处理文件上传?

💡 回答要点
const formData = new FormData();
formData.append("file", file);axios.post('/upload', formData, {headers: { "Content-Type": "multipart/form-data" }
}).then(response => console.log(response.data));

Q12:如何实现 Axios 的请求重试?

💡 回答要点

使用拦截器在请求失败时自动重试:

axiosInstance.interceptors.response.use(null, async error => {if (error.config && !error.config.__isRetryRequest) {error.config.__isRetryRequest = true;return axiosInstance(error.config); // 重新发送请求}return Promise.reject(error);
});

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

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

相关文章

瑞芯微RKRGA(librga)Buffer API 分析

一、Buffer API 简介 在瑞芯微官方的 librga 库的手册中&#xff0c;有两组配置 buffer 的API&#xff1a; importbuffer 方式&#xff1a; importbuffer_virtualaddr importbuffer_physicaladdr importbuffer_fd wrapbuffer 方式&#xff1a; wrapbuffer_virtualaddr wrapb…

C语言:多线程

多线程概述 定义 多线程是指在一个程序中可以同时运行多个不同的执行路径&#xff08;线程&#xff09;&#xff0c;这些线程可以并发或并行执行。并发是指多个线程在宏观上同时执行&#xff0c;但在微观上可能是交替执行的&#xff1b;并行则是指多个线程真正地同时执行&…

Linux线程池实现

1.线程池实现 全部代码&#xff1a;whb-helloworld/113 1.唤醒线程 一个是唤醒全部线程&#xff0c;一个是唤醒一个线程。 void WakeUpAllThread(){LockGuard lockguard(_mutex);if (_sleepernum)_cond.Broadcast();LOG(LogLevel::INFO) << "唤醒所有的休眠线程&q…

微信小程序逆向开发

一.wxapkg文件 如何查看微信小程序包文件&#xff1a; 回退一级 点击进入这个目录 这个就是我们小程序对应的文件 .wxapkg概述 .wxapkg是微信小程序的包文件格式&#xff0c;且其具有独特的结构和加密方式。它不仅包含了小程序的源代码&#xff0c;还包括了图像和其他资源文…

多输入多输出 | Matlab实现CPO-LSTM冠豪猪算法优化长短期记忆神经网络多输入多输出预测

多输入多输出 | Matlab实现CPO-LSTM冠豪猪算法优化长短期记忆神经网络多输入多输出预测 目录 多输入多输出 | Matlab实现CPO-LSTM冠豪猪算法优化长短期记忆神经网络多输入多输出预测预测效果基本介绍程序设计参考资料 预测效果 基本介绍 Matlab实现CPO-LSTM冠豪猪算法优化长短期…

视频编码器的抉择:x264、x265、libaom、vvenc 对比测试实验

264、x265、libaom、vvenc 对比测试实验 测试机器配置&#xff1a;Apple M1 Pro -16G编码器版本&#xff08;选择自己编译&#xff09;&#xff1a;所有源码都是当前最新更新的状态&#xff0c;此外各类编码具体的编译过程可参考我的相关系列博客。 编码器GitHubx264git clon…

【二刷代码随想录】双指针-数组相关题型、推荐习题

一、双指针-数组 相关题型与常用思路 1、单个数组 &#xff08;1&#xff09;原地移除元素类 如推荐习题中的&#xff08;1&#xff09;、&#xff08;2&#xff09;、&#xff08;3&#xff09;&#xff0c;都属于此类。引入双指针 pre、last &#xff0c;用 pre 指针表明数…

Level DB --- TableCache

TableCache 是Level DB 中重要的类&#xff0c;Level DB 中多层&#xff08;multi level&#xff09;&#xff0c;且每一层&#xff08;level&#xff09;有多个 key-value file&#xff0c;TableCache正是用来缓存多层以及多层中的file数据&#xff0c;更快速地检索。 table …

搜索-BFS

马上蓝桥杯了&#xff0c;最近刷了广搜&#xff0c;感觉挺有意思的&#xff0c;广搜题类型都差不多&#xff0c;模板也一样&#xff0c;大家写的时候可以直接套模板 这里给大家讲一个比较经典的广搜题-迷宫 题目问问能否走到 (n,m) 位置&#xff0c;假设最后一个点是我们的&…

智能预测维护:让设备“未卜先知”,减少宕机烦恼

智能预测维护:让设备“未卜先知”,减少宕机烦恼 1. 引言:设备维护的痛点与出路 在工业生产和自动化领域,设备故障一直是令人头疼的问题。设备一旦故障,轻则影响生产效率,重则造成严重损失,甚至带来安全隐患。传统的设备维护方式主要有两种: 被动维护(Reactive Maint…

安卓的布局方式

一、RelativeLayout 相对布局 特点&#xff1a;每个组件相对其他的某一个组件进行定位。 (一)主要属性 1、设置和父组件的对齐&#xff1a; alignParentTop &#xff1a; 设置为true&#xff0c;代表和父布局顶部对齐。 其他对齐只需要改变后面的Top为 Left、Right 或者Bottom&…

SSM中药分类管理系统

&#x1f345;点赞收藏关注 → 添加文档最下方联系方式咨询本源代码、数据库&#x1f345; 本人在Java毕业设计领域有多年的经验&#xff0c;陆续会更新更多优质的Java实战项目希望你能有所收获&#xff0c;少走一些弯路。&#x1f345;关注我不迷路&#x1f345; 项目视频 SS…

epoch、batch、batch size、step、iteration深度学习名词含义详细介绍

卷积神经网络训练中的三个核心概念&#xff1a;Epoch、Batch Size 和迭代次数 在深度学习中&#xff0c;理解一些基本的术语非常重要&#xff0c;这些术语对模型的训练过程、效率以及最终性能都有很大影响。以下是一些常见术语的含义介绍&#xff1a; 1. Epoch&#xff08;周…

React(七):Redux

Redux基本使用 纯函数&#xff1a;1.函数内部不能依赖函数外部变量&#xff1b;2.不能产生副作用&#xff0c;在函数内部改变函数外部的变量 React只帮我们解决了DOM的渲染过程&#xff0c;State还是要由我们自己来管理——redux可帮助我们进行管理 Redux三大特点 1.单一数…

《Android低内存设备性能优化实战:深度解析Dalvik虚拟机参数调优》

1. 痛点分析&#xff1a;低内存设备的性能困局 现象描述&#xff1a;大应用运行时频繁GC导致卡顿 根本原因&#xff1a;Dalvik默认内存参数与硬件资源不匹配 解决方向&#xff1a;动态调整堆内存参数以平衡性能与资源消耗 2. 核心调优参数全景解析 关键参数矩阵&#xff1…

STC89C52单片机学习——第38节: [17-2] 红外遥控红外遥控电机

写这个文章是用来学习的,记录一下我的学习过程。希望我能一直坚持下去,我只是一个小白,只是想好好学习,我知道这会很难&#xff0c;但我还是想去做&#xff01; 本文写于&#xff1a;2025.03.30 51单片机学习——第38节: [17-2] 红外遥控&红外遥控电机 前言开发板说明引用…

计算机组成原理————计算机运算方法精讲<1>原码表示法

第一部分:无符号数和有符号数的概念 1.无符号数 计算机中的数均存放在寄存器当中,通常称寄存器的位数为机器字长,所谓无符号数,就是指没有fu5号的数,在寄存器中的每一位均可用来存放数值,当存放有符号数时,需要留出位置存放符号,机器字长相同时,无符号数与有符号数所…

【什么是机器学习——多项式逼近】

什么是机器学习——多项式逼近 机器学习可以分成三大类别,监督学习、非监督学习、强化学习。三大类别背后的数学原理不同。监督学习使用了数学分析中的函数逼近方法和概率统计中的极大似然方法;非监督学习使用聚类和EM算法;强化学习使用马尔可夫决策过程的想法。 机器学习的…

Ubuntu 22.04 上安装阿里云 CLI(命令行工具)

在 Ubuntu 22.04 上安装阿里云 CLI&#xff08;命令行工具&#xff09;可以通过以下步骤完成&#xff1a; 步骤 1&#xff1a;下载阿里云 CLI 安装包 打开终端&#xff0c;首先更新你的软件包索引&#xff1a; sudo apt update安装 curl&#xff08;如果还没有安装&#xff09…

​Android Gradle 插件(AGP)版本与 ​Gradle 版本需要严格对应

一、AGP 与 Gradle 版本对照表 Android Gradle 插件版本对应 Gradle 版本适用 Android Studio 版本​8.1.x8.2Arctic Fox (2020.3.1+)​8.0.x8.0Arctic Fox (2020.3.1+)​7.4.x7.5.1IntelliJ IDEA 2022+​7.3.x7.4IntelliJ IDEA 2022+​7.2.x7.3.3IntelliJ IDEA 2021.3+​7.1.x…