从零到一: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);
});
相关推荐
J总裁的小芒果4 分钟前
THREE.js 入门(六) 纹理、uv坐标
开发语言·javascript·uv
m0_548514775 分钟前
前端Pako.js 压缩解压库 与 Java 的 zlib 压缩与解压 的互通实现
java·前端·javascript
AndrewPerfect5 分钟前
xss csrf怎么预防?
前端·xss·csrf
Calm5508 分钟前
Vue3:uv-upload图片上传
前端·vue.js
浮游本尊13 分钟前
Nginx配置:如何在一个域名下运行两个网站
前端·javascript
m0_7482398313 分钟前
前端bug调试
前端·bug
m0_7482329216 分钟前
[项目][boost搜索引擎#4] cpp-httplib使用 log.hpp 前端 测试及总结
前端·搜索引擎
新中地GIS开发老师21 分钟前
《Vue进阶教程》(12)ref的实现详细教程
前端·javascript·vue.js·arcgis·前端框架·地理信息科学·地信
m0_7482495423 分钟前
前端:base64的作用
前端
html组态29 分钟前
web组态可视化编辑器
前端·物联网·编辑器·web组态·组态·组态软件