Axios 的介绍(使用和作用)

2023-09-18 21:47:49

Axios 是一个基于 promise 的 HTTP 库,可以用在浏览器和 node.js 中

axios的作用是什么呢?

 axios主要是用于向后台发起请求的,还有在请求中做更多是可控功能。

axios 特点

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

简单介绍一下promise   吧。  (ps:高手写代码用的都是面向对象,所以根本不用这个回调地狱的手法,promise  主要是用来解决异步问题的,由于很多程序员都是同步思考习惯了,异步思起来就挺麻烦,所以代码会出现一套嵌套这一套,当多起来的时候那真的是可以写出一条长龙。先说一个简单应用把,比如图片的预加载,这可以用promise来写,因为图片大小不同,如果一下子全部加载,会出现堵住,第一张图片加载完了之后开始第二张图片加载,promise就是干这个事情的,“你好了没有?好了就到我了”)

promise是什么:是一个对象用来传递异步操作的信息,它代表了某个未来才会知道结果的事件(通常是一个异步操作),并且这个事件提供统一的api,可供进一步的处理。

promise的作用:Promise的出现主要是解决地狱回调的问题,比如你需要结果需要请求很多个接口,这些接口的参数需要另外那个的接口返回的数据作为依赖,这样就需要我们一层嵌套一层,但是有了Promise 我们就无需嵌套。

promise的本质是什么:分离异步数据获取和业务

ps: 可能大家对interceptor(拦截器)并不是很熟悉,在这里作下介绍,拦截器可以在请求发送前和发送请求后做一些处理。有一张图可以清晰的了解它在一次HTTP请求中做了什么,如下图

拦截器

在请求或响应被 then 或 catch 处理前拦截它们(拦截器可以做什么:在请求或者响应时拦截下来进行处理)

拦截器分为请求拦截器和响应拦截器

请求拦截器(interceptors.requst)是指可以拦截每次或指定HTTP请求,并可修改配置项。

响应拦截器(interceptors.response)可以在每次HTTP请求后拦截住每次或指定HTTP请求,并可修改返回结果项。

移除拦截器

自定义axios实例添加拦截器

执行get请求

// 为给定 ID 的 user 创建请求
axios.get('/user?ID=12345')
  .then(function (response) {
    console.log(response);
  })
  .catch(function (error) {
    console.log(error);
  });

// 可选地,上面的请求可以这样做
axios.get('/user', {
    params: {
      ID: 12345
    }
  })
  .then(function (response) {
    console.log(response);
  })
  .catch(function (error) {
    console.log(error);
  });

执行post请求

axios.post('/user', {
    firstName: 'Fred',
    lastName: 'Flintstone'
  })
  .then(function (response) {
    console.log(response);
  })
  .catch(function (error) {
    console.log(error);
  });

执行多个并发请求

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) {
    // 两个请求现在都执行完成
  }));

可以通过向axios传递相关的配置来创建请求
axios(config

// 发送 POST 请求
axios({
  method: 'post',
  url: '/user/12345',
  data: {
    firstName: 'Fred',
    lastName: 'Flintstone'
  }
});

axios(url[,config])

// 发送 GET 请求(默认的方法)
axios('/user/12345');

axios提供了一下几种请求方式

1.axios.get(url[, config])  执行 GET 请求
    //eg:
 
    // 向具有指定ID的用户发出请求
    axios.get('/user?ID=12345')
      .then(function (response) {
        console.log(response);
      })
      .catch(function (error) {
        console.log(error);
      });
      
    // 也可以通过 params 对象传递参数
    axios.get('/user', {
        params: {
          ID: 12345
        }
      })
      .then(function (response) {
        console.log(response);
      })
      .catch(function (error) {
        console.log(error);
      });
 2.axios.post(url[, data[, config]]) 执行 POST 请求
    //eg:
    axios.post('/user', {
        firstName: 'Fred',
        lastName: 'Flintstone'
      })
      .then(function (response) {
        console.log(response);
      })
      .catch(function (error) {
        console.log(error);
      });
3.axios.request(config)
 
4.axios.head(url[, config])
 
5.axios.delete(url[, config])
 
6.axios.put(url[, data[, config]])
 
7.axios.patch(url[, data[, config]])
 
8.axios.all(iterable)执行多个并发请求
 
    eg:
        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) {
            // 两个请求现在都执行完成
          }));
9.axios.spread(callback)
 
 
//注意:处理并发请求的助手函数
    axios.all(iterable)
    axios.spread(callback)

 请求配置

这些是创建请求时可以用的配置选项。只有 url 是必需的。如果没有指定 method,请求将默认使用 get 方法。

//config
 
{
  // `url` 是用于请求的服务器 URL
  url: '/user',
 
  // `method` 是创建请求时使用的方法
  method: 'get', // 默认是 get
 
  // `baseURL` 将自动加在 `url` 前面,除非 `url` 是一个绝对 URL。
  // 它可以通过设置一个 `baseURL` 便于为 axios 实例的方法传递相对 URL
  baseURL: 'https://some-domain.com/api/',
 
  // `transformRequest` 允许在向服务器发送前,修改请求数据
  // 只能用在 'PUT', 'POST' 和 'PATCH' 这几个请求方法
  // 后面数组中的函数必须返回一个字符串,或 ArrayBuffer,或 Stream
  transformRequest: [function (data) {
    // 对 data 进行任意转换处理
 
    return data;
  }],
 
  // `transformResponse` 在传递给 then/catch 前,允许修改响应数据
  transformResponse: [function (data) {
    // 对 data 进行任意转换处理
 
    return data;
  }],
 
  // `headers` 是即将被发送的自定义请求头
  headers: {'X-Requested-With': 'XMLHttpRequest'},
 
  // `params` 是即将与请求一起发送的 URL 参数
  // 必须是一个无格式对象(plain object)或 URLSearchParams 对象
  params: {
    ID: 12345
  },
 
  // `paramsSerializer` 是一个负责 `params` 序列化的函数
  // (e.g. https://www.npmjs.com/package/qs, http://api.jquery.com/jquery.param/)
  paramsSerializer: function(params) {
    return Qs.stringify(params, {arrayFormat: 'brackets'})
  },
 
  // `data` 是作为请求主体被发送的数据
  // 只适用于这些请求方法 'PUT', 'POST', 和 'PATCH'
  // 在没有设置 `transformRequest` 时,必须是以下类型之一:
  // - string, plain object, ArrayBuffer, ArrayBufferView, URLSearchParams
  // - 浏览器专属:FormData, File, Blob
  // - Node 专属: Stream
  data: {
    firstName: 'Fred'
  },
 
  // `timeout` 指定请求超时的毫秒数(0 表示无超时时间)
  // 如果请求话费了超过 `timeout` 的时间,请求将被中断
  timeout: 1000,
 
  // `withCredentials` 表示跨域请求时是否需要使用凭证
  withCredentials: false, // 默认的
 
  // `adapter` 允许自定义处理请求,以使测试更轻松
  // 返回一个 promise 并应用一个有效的响应 (查阅 [response docs](#response-api)).
  adapter: function (config) {
    /* ... */
  },
 
  // `auth` 表示应该使用 HTTP 基础验证,并提供凭据
  // 这将设置一个 `Authorization` 头,覆写掉现有的任意使用 `headers` 设置的自定义 `Authorization`头
  auth: {
    username: 'janedoe',
    password: 's00pers3cret'
  },
 
  // `responseType` 表示服务器响应的数据类型,可以是 'arraybuffer', 'blob', 'document', 'json', 'text', 'stream'
  responseType: 'json', // 默认的
 
  // `xsrfCookieName` 是用作 xsrf token 的值的cookie的名称
  xsrfCookieName: 'XSRF-TOKEN', // default
 
  // `xsrfHeaderName` 是承载 xsrf token 的值的 HTTP 头的名称
  xsrfHeaderName: 'X-XSRF-TOKEN', // 默认的
 
  // `onUploadProgress` 允许为上传处理进度事件
  onUploadProgress: function (progressEvent) {
    // 对原生进度事件的处理
  },
 
  // `onDownloadProgress` 允许为下载处理进度事件
  onDownloadProgress: function (progressEvent) {
    // 对原生进度事件的处理
  },
 
  // `maxContentLength` 定义允许的响应内容的最大尺寸
  maxContentLength: 2000,
 
  // `validateStatus` 定义对于给定的HTTP 响应状态码是 resolve 或 reject  promise 。如果 `validateStatus` 返回 `true` (或者设置为 `null` 或 `undefined`),promise 将被 resolve; 否则,promise 将被 rejecte
  validateStatus: function (status) {
    return status >= 200 && status < 300; // 默认的
  },
 
  // `maxRedirects` 定义在 node.js 中 follow 的最大重定向数目
  // 如果设置为0,将不会 follow 任何重定向
  maxRedirects: 5, // 默认的
 
  // `httpAgent` 和 `httpsAgent` 分别在 node.js 中用于定义在执行 http 和 https 时使用的自定义代理。允许像这样配置选项:
  // `keepAlive` 默认没有启用
  httpAgent: new http.Agent({ keepAlive: true }),
  httpsAgent: new https.Agent({ keepAlive: true }),
 
  // 'proxy' 定义代理服务器的主机名称和端口
  // `auth` 表示 HTTP 基础验证应当用于连接代理,并提供凭据
  // 这将会设置一个 `Proxy-Authorization` 头,覆写掉已有的通过使用 `header` 设置的自定义 `Proxy-Authorization` 头。
  proxy: {
    host: '127.0.0.1',
    port: 9000,
    auth: : {
      username: 'mikeymike',
      password: 'rapunz3l'
    }
  },
 
  // `cancelToken` 指定用于取消请求的 cancel token
  // (查看后面的 Cancellation 这节了解更多)
  cancelToken: new CancelToken(function (cancel) {
  })
}

响应结构

某个请求的响应包含以下信息

{
  // `data` 由服务器提供的响应
  data: {},
 
  // `status` 来自服务器响应的 HTTP 状态码
  status: 200,
 
  // `statusText` 来自服务器响应的 HTTP 状态信息
  statusText: 'OK',
 
  // `headers` 服务器响应的头
  headers: {},
 
  // `config` 是为请求提供的配置信息
  config: {}
}

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) {
    // 两个请求现在都执行完成
  }));
更多推荐

最新Java JDK 21:全面解析与新特性探讨

🌷🍁博主猫头虎带您GotoNewWorld.✨🍁🦄博客首页——猫头虎的博客🎐🐳《面试题大全专栏》文章图文并茂🦕生动形象🦖简单易学!欢迎大家来踩踩~🌺🌊《IDEA开发秘籍专栏》学会IDEA常用操作,工作效率翻倍~💐🌊《100天精通Golang(基础入门篇)》学会Golang语言,畅玩云原生,走遍大

ChatGPT与日本首相交流核废水事件-精准Prompt...

了解更多请点击:ChatGPT与日本首相交流核废水事件-精准Prompt...https://mp.weixin.qq.com/s?__biz=Mzg2NDY3NjY5NA==&mid=2247490070&idx=1&sn=ebdc608acd419bb3e71ca46acee04890&chksm=ce64e42f

时序数据库 IoTDB 发布端边云原生解决方案,有效优化工业互联网数据上传时效与资源消耗...

2023年9月8日,由中国通信学会、福建省工业和信息化厅主办的2023中国国际工业互联网创新发展大会在厦门举办。大会主论坛中,时序数据库IoTDB发表其自研建立的端边云原生解决方案,该方案可实现端侧设备、边缘服务器、数据中心数据的协同汇聚,达到数据实时上传、带宽成本控制、与多终端同步管理。01关于大会为贯彻落实国家两个

大模型为使用Prompt提供的指导和建议

当使用大型语言模型时,合适的Prompt对于获取理想的响应至关重要。以下是一些常见任务的Prompt示例,以供参考:1.自然语言生成:“请为我生成一篇关于气候变化影响的文章。”“写一封感谢信,内容表达对某位导师的感激之情。”“编写一首诗,描述夏天的美丽。”2.问答任务:“回答以下问题:什么是人工智能?”“解释量子力学的

Java 泛型

目录(generic泛型)引言-idea技巧(快捷键)泛型的理解和好处传统方式用泛型来解决前面的问题(快速入门)泛型的好处泛型基本语法泛型介绍示例代码泛型的声明泛型的实例化(什么时候给泛型指定一个具体的类型)-一般来说是创建一个对象的时候指定的示例代码泛型语法和使用泛型使用案例自定义泛型自定义泛型类自定义泛型接口自定义

Prompt-To-Prompt——仅通过文本进行图像编辑

文章目录1.摘要2.算法2.1Cross-attentionintext-conditionedDiffusionModels2.2ControllingtheCross-attentionWordSwapAddingaNewPhraseAttentionRe–weighting3.应用Text-OnlyLocaliz

【C++】动态内存管理 ④ ( 对象的动态创建和释放引申思考 | 基础数据类型 内存分析 | malloc 分配内存 delete 释放 | new 分配内存 free 释放内存 )

文章目录一、对象的动态创建和释放引申思考二、基础数据类型内存分析1、malloc分配内存delete释放内存2、new分配内存free释放内存一、对象的动态创建和释放引申思考malloc和free是C语言stdlib标准库中的函数,用于分配和回收堆内存;new和delete是C++语言中的操作符,用于分配和回收堆内存;

[C++从入门到精通] 9.inline、const、mutable、this和static

📢博客主页:https://loewen.blog.csdn.net📢欢迎点赞👍收藏⭐留言📝如有错误敬请指正!📢本文由丶布布原创,首发于CSDN,转载注明出处🙉📢现在的付出,都会是一种沉淀,只为让你成为更好的人✨文章预览:一.特殊的成员函数inline二.成员函数末尾的const三.mutable四.返回

【Graph Net学习】LINE实现Graph Embedding

一、简介LINE(Large-scaleInformationNetworkEmbedding,2015)是一种设计用于处理大规模信息网络的算法。它主要的目标是在给定的大规模信息网络中学习高质量的节点嵌入,并尽量保留网络中信息的丰富性。其具体的表现为在一个低维空间里以向量形式表示网络中的节点,以便后续的机器学习任务可以

Kafka实现保证一批消息顺序生产消费的方案

背景ApacheKafka是一种高吞吐量的分布式发布订阅消息系统,它可以处理消费者和生产者之间的所有实时数据。在Kafka中,消息是以topic为单位进行归类的,而每个topic又可以分为多个partition,以实现数据的高效存储和并发处理。然而,由于Kafka的设计特性,消息在消费时并不能保证顺序。为了解决这个问题

【网络编程】网络基础

文章目录一、网络发展1.网络发展史2.局域网和广域网二、网络协议1.协议分层2.OSI七层模型3.TCP/IP五层模型三、网络传输的基本流程1.局域网通信原理2.不同局域网的通信原理3.IP地址与MAC地址一、网络发展1.网络发展史计算机网络的发展经历了多个阶段,从早期的简单通信系统到现代互联网的复杂网络架构。以下是计

热文推荐