从零到一:Axios助力你的API交互之旅

axios 原理

通过XMLHttpRequestNode.js的http/https模块来发送http请求,并返回一个Promise对象。使得发送HTTP请求变得简单,并支持多种特性,比如请求和响应的拦截、取消请求、转换请求、响应数据等等。

中文官网

拦截器

请求拦截

  1. 定义拦截器

axios.interceptors.request.use()接受两个参数,一个成功处理函数和一个失败处理函数,两个函数都有一个配置对象作为参数,并返回一个修改后的配置对象或者Promise。

  1. 添加拦截器
  2. 处理请求

在成功处理函数中,可以修改配置项(请求头,请求体,参数等等)并返回修改后的配置项。

  1. 处理错误

在失败处理函数中,可以处理请求在到达服务器之前发生的错误(网络错误,配置错误等等),可以返回一个Promise,可解析为新的配置项或者错误。

响应拦截

与请求拦截类似,只是处理的是服务器的响应。

优缺点

优点

  1. 灵活性 : 可在多个阶段添加自定义逻辑,例如添加认证信息,处理错误等等.
  2. 全局配置: 拦截器会应用于所有的请求或响应,减少重复代码,使全局性的配置和修改会变得简单.
  3. 可维护性
  4. 控制响应: 可以在响应拦截器中根据响应的数据决定是直接返回数据还是抛出错误还是进行其他处理.
  5. 方便的错误处理: 可以在响应拦截器中同意处理服务器的错误状态码.

缺点

  1. 由于其全局性,如果出现错误会对所有请求产生影响;
  2. 在高并发或者大量请求的场景下,会对性能产生一定的影响;
  3. 若过度使用拦截器,会增加代码的复杂性且难以维护。

二次封装实例

安装axios

js 复制代码
yarn add axios
npm install axios

新建一个 axios 实例

在scr文件夹下创建一个utils文件夹,在utils文件夹下创建一个request.js的文件,引入axios后,使用creat创建一个实例

js 复制代码
const request = axios.create({
    baseURL: '/api', // 设置基础 URL, 当使用这个 axios 实例发起请求时,所有请求的 URL 都会自动以 `/api` 开头,除非在请求时明确指定了完整的 URL
    headers: { // 设置默认的请求头
        'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8'
    },
    withCredentials: true,// 设置为 `true`,这允许跨站请求时携带凭证
    timeout: 30000, // 设置超时时间,如果请求在 30 秒内没有响应,那么 axios 会抛出一个错误
    transformRequest: [(data) => { // 在发送请求之前修改请求数据
        return data
    }],
});
//还有很多的配置项,可以访问官网去添加自己需要的配置项

添加拦截器

js 复制代码
// 添加请求拦截器
request.interceptors.request.use(function (config) {
    // 在发送请求之前做些什么
    return config;
}, function (error) {
    // 对请求错误做些什么
    return Promise.reject(error);
});

// 添加响应拦截器
request.interceptors.response.use(function (response) {
    // 对响应数据做点什么
    return response;
}, function (error) {
    // 对响应错误做点什么
    return Promise.reject(error);
});
相关推荐
代码搬运媛6 小时前
Jest 测试框架详解与实现指南
前端
counterxing7 小时前
我把 Codex 里的 Skills 做成了一个 MCP,还支持分享
前端·agent·ai编程
wangqiaowq8 小时前
windows下nginx的安装
linux·服务器·前端
之歆8 小时前
DAY_12JavaScript DOM 完全指南(二):实战与性能篇
开发语言·前端·javascript·ecmascript
发现一只大呆瓜8 小时前
Vite凭什么这么快?3分钟带你彻底搞懂 Vite 热更新的幕后黑手
前端·面试·vite
Maimai108088 小时前
React如何用 @microsoft/fetch-event-source 落地 SSE:比原生 EventSource 更灵活的实时推送方案
前端·javascript·react.js·microsoft·前端框架·reactjs·webassembly
candyTong8 小时前
Claude Code 的 Edit 工具是怎么工作的
javascript·后端·架构
kyriewen10 小时前
产品经理把PRD写成“天书”,我用AI半小时重写了一遍,他当场愣住
前端·ai编程·cursor
humcomm10 小时前
元框架的工作原理详解
前端·前端框架
canonical_entropy11 小时前
Attractor Before Harness: AI 大规模开发的方法论
前端·aigc·ai编程