axios网络请求

axios网络请求

淘汰ajax,jquery ajax,选择axios

axios名称的由来? 个人理解
axios: ajax i/o system

请求方式

  • axios(config) //默认请求方式
  • axios.request(config)
  • axios.get(url,{config})
  • axios.delete(url,{config})
  • axios.head(url,{config})
  • axios.post(url,data,{config})
  • axios.put(url,data,{config})
  • axios.patch(url,data,{config})

axios的使用

  1. 安装axios
    npm install axios --save
  2. 这里使用第一种请求方式axios(config)
  3. config配置属性
    url:‘http://被请求的接口‘,
    method:‘get或post‘,
    params:{针对get请求的参数拼接},
    data:{针对post请求时参数获取}
  4. axios支持promise,成功后回调then,失败回调catch

axios并发请求

  • 使用方法和promist.all一样。
  • 在axios.all([])放入并发请求的axios,都请求成功后在then中回调
  • axios.all([])返回的是一个数组,axios还提供了axios.spread,
    它可以将数组展开使用,res1,res2,,

      //这个httpbin.org网站可以做很多网络请求模拟,没有接口可以尝试用这个
      axios.all([
        axios({
          url:'接口1',
        }),
        axios({
          url:'接口2',
          params:{
            type:'pop',
            page:1
          }
        })
      ]).then(axios.spread((res1,res2) => {
        console.log(res1);
        console.log(res2);
      }))

如果想两个接口内容相同,我们只需获取一个接口的话,请参考axios封装第二步,封装两个接口,
在catch中使用接口2并传入参数即可。

全局配置

把一些固定的参数抽取出来进行全局配置

axios.defaults.timeout = 1000
axios.defaults.baseURL = '基础接口';
//后面设置url的时候只需写路径即可,如/home/data

常见的配置选项

  • 请求地址

    • url: ‘/user‘,
  • 请求类型
    • method: ‘get‘,
  • 请根路径
  • 请求前的数据处理
    • transformRequest:[function(data){}],
  • 请求后的数据处理
    • transformResponse: [function(data){}],
  • 自定义的请求头
    • headers:{‘x-Requested-With‘:‘XMLHttpRequest‘},
  • URL查询对象
    • params:{ id: 12 },
  • 查询对象序列化函数
    • paramsSerializer: function(params){ }
  • request body
    • data: { key: ‘aa‘},
  • 超时设置
    • timeout: 1000,
  • 跨域是否带Token
    • withCredentials: false,
  • 自定义请求处理
    • adapter: function(resolve, reject, config){},
  • 身份验证信息
    • auth: { uname: ‘‘, pwd: ‘12‘},
  • 响应的数据格式 json / blob /document /arraybuffer / text / stream
    • responseType: ‘json‘,

axios实例

在开发中有可能我们用的不是一个接口,这个时候使用全局配置就无法获取多个接口了

我们可以创建一个axios实例,一个实例对应一个接口和相应配置,提高开发效率。

  1. 创建实例中基础配置
    const instance1 = axios.create({
    baseURL:‘基础接口‘,
    timeout:5000
    })
  2. 使用实例和配置路径等
    instance1({
    url:‘路径1‘,
    params:{}
    }).then(rel =>{
    console.log(rel)
    })
  3. 当有多个接口配置多个实例即可

axios封装

在网络开发中,我们使用第三方插件有可能出现第三方插件重大bug或不再维护的情况

当出问题时多个页面修改第三方插件是一件很麻烦的事,所以我们可以封装一个文件作为代理

其他页面从代理中传入config并获取请求,当第三方插件失效只需修改代理文件即可,无需全部修改

一、 回调式封装

  1. 封装代理文件,以函数形式导出。如多个接口可配置多个函数导出
  2. 函数内传入三个参数,config,success,failure。这里success和failure是函数。
  3. 在函数中配置axios实例,在实例then和catch中分别回调函数success和failure
  4. 在需要请求页面导入代理,调用并传入(config,success函数,failure函数)

二、 promise式封装

  1. 导出封装函数,函数中传入config参数。如多个接口可配置多个函数导出
  2. 函数中返回一个promise,在promise中嵌套axios实例
  3. 实例回调result中再使用promise的回调,把回调的结果返回出去
  4. 在请求页面导入,因已返回结果,所以直接传入axios配置,然后正常then/catch即可。
    (就是在执行笔记:axios实例第2步)
    import axios from 'axios'

    export function request(config) {
      return new Promise((resolve, reject) => {
        const instance = axios.create({
          baseURL:'http://123.207.32.32:8000/api/hy',
          timeout:5000
        })

        instance(
          config
        ).then( res => {
          resolve(res)
        }).catch(err =>{
          reject(err)
        })

      })
    }

三、 最终封装-由promise式改编(大道至简)

在axios实例中已经内置了promise,所以我们才能回调then/catch,

为什么我们还要再使用promise再回调一次呢,我们的目的是返回结果,

直接把axios实例返回出去不就好了嘛

import axios from 'axios'

export function request(config) {
    const instance = axios.create({
      baseURL:'http://123.207.32.32:8000/api/hy',
      timeout:5000
    })
    return instance(config)
}

啰嗦一句。这里不是export default导出。导入的话记得加import{} 花括号

* axios拦截器

全局拦截
拦截器前面使用axios

局部拦截
拦截器前面使用的是实例的名称

拦截四种方式:

  • request成功拦截
  • request失败拦截
      instance.interceptors.request.use(config =>{
        console.log(config);
        return config
      },error => {
        console.log(error);
      })
  • response成功拦截
  • response失败拦截
      instance.interceptors.response.use(result =>{
        console.log(result);
        return result.data
      },error => {
        console.log(error);
      })

拦截器需求列举

  1. 拦截一些config中不符合服务器要求的信息
  2. 发送请求时,都希望在界面中显示一个请求图标,如图片加载转圈
  3. 网络登入请求(token),没有特殊信息不允许登入

注意事项:

  1. 拦截器中use传入的是两个函数,result回调和error回调
  2. request拦截成功后记得把数据再返回出去
  3. response拦截成功后只需把data返回出去即可,其他东西是axios这个框架添加的
  4. result拦截主要是对数据进行过滤,error拦截主要是根据错误跳转不同错误提示页面

原文地址:https://www.cnblogs.com/lovecode3000/p/12323078.html

时间: 2024-08-10 08:02:37

axios网络请求的相关文章

axios对请求各种异常情况处理的封装方法

前端采用了axios来处理网络请求,为了避免在每次请求时都去判断各种各样的网络情况,比如连接超时.服务器内部错误.权限不足等等不一而足,我对axios进行了简单的封装,这里主要使用了axios中的拦截器功能. 封装后的网络请求工具js如下 前端精品教程:百度网盘下载 ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41

一篇文章带你了解axios网络交互-Vue

来源:滁州SEO 1 **什么是axios呢?**了解,并去使用它,对于axios发送请求的两种方式有何了解,以及涉及axios跨域问题如何解决. 对于axios网络交互,去使用axios的同时,首先你要了解它是什么,如何使用才是.说axios网络交互,即发送请求,前面说两种方法,一为发送GET请求,二为POST请求. 解决axios跨域问题. 2 要想使用axios,是不是要了解它呢,讲解一下它.axios是基于Promise的HTTP库,可以用在浏览器和node环境中,在应用程序中,向服务器

ios编程之网络请求

网络请求有GET请求和POST请求,get和post实现的时候可以选择同步或者异步实现.看一个请求是GET还是POST就看网址后面有没有携带请求体. GET与POST 区别 1.get请求 请求的网址全部明文显示 安全性不高 2.get请求 请求的网址 有字符数的限制 大概255个 3.post请求 请求的网址 不光是有一个请求的网址 还可以携带请求体 这个请求体 是以NSData形式存在 安全性较高 4.post请求没有字符数的限制 GET同步和GET异步 同步请求是在请求数据的时候不能做其他

Swift网络请求(Moya篇)

在使用Alamofire进行网络请求的时候,相信大部分的同学都会封装一个抽象的NetworkLayer,如"APIManager" 或者 "NetworkModel"等等.但是位置业务功能增加,会渐渐混合各种请求,不够清晰,而Moya能很好地解决这类问题.Moya在Alamofire基础上进行封装,是一个允许高度自定义的网络层,可以根据具体的需求进行接口的设置.具体的介绍可以参考Moya的官方链接,结构图如下: 接下来就介绍一下Moya的一些常见的用法: (一)根据

微信小程序 网络请求之re.request 和那些坑

微信小程序有四种网络请求类型,下面只详细介绍普通HTTPS请求(wx.request) 普通HTTPS请求(wx.request) 上传文件(wx.uploadFile) 下载文件(wx.downloadFile) WebSocket通信(wx.connectSocket) 首先,先确认是否设置了合法域名,或者在开发环境下不校验合法域名.关于设置合法域名请看→微信小程序 网络请求之设置合法域名   以下是wx.request的详细说明,截图于微信小程序开发文档 在微信index.js 发起一个普

Android网络请求框架AsyncHttpClient实例详解(配合JSON解析调用接口)

最近做项目要求使用到网络,想来想去选择了AsyncHttpClient框架开进行APP开发.在这里把我工作期间遇到的问题以及对AsyncHttpClient的使用经验做出相应总结,希望能对您的学习有所帮助. 首先按照惯例先来简单了解一些AsyncHttpClient网络框架的一些知识. 1.简介 Android中网络请求一般使用Apache HTTP Client或者采用HttpURLConnect,但是直接使用这两个类库需要写大量的代码才能完成网络post和get请求,而使用android-a

Go实战--实现一个自己的网络请求日志httplogger(The way to go)

生命不止,继续go go go~~~ 之前我们简要介绍了go语言中的log package 和 net/http package,那么我们今天就干点实事儿,将二者结合,实现我们自己的日志记录网络请求. 另外,我们还没有跟你介绍time package,但是也可以看懂的. 首先,我默认你了解go语言的组织结构. 导入需要的package 我们需要 log net/http time三个包 package httplogger import ( "log" "net/http&q

Android实际开发之网络请求组件的封装(OkHttp为核心)

趁周末时间撸了两天代码,将OkHttp网络请求框架进行了一次简单封装,对于实际开发非常有用.. 此次封装主要针对我们经常使用的网络请求的步骤进行封装,在已有框架OkHttp的基础上进行实际开发的封装 发送一个网络请求,有以下三个功能模块: 一:request处理 二:OkHttp核心处理 三:callback处理 我们进行网络请求组件的封装也是根据这三大模块进行封装的,下面规划一下这次封装的一个思维导图: 根据以上思维导图,我们第一步,先进行request的封装: 以下是封装的一个CommonR

【Swift】Alamofile网络请求数据更新TableView的坑

写这篇BLOG前,有些话不得不提一下,就仅当发发恼骚吧... 今天下午为了一个Alamofire取得数据而更新TableView的问题,查了一下午的百度(360也是见鬼的一样),竟然没有一个简单明了的回答, 而唯一几个比较接近答案的,说要 self.tableView.reloadData(),也没有贴上代码,说要放在哪个函数内, 都犹抱琵琶半遮面,让初学者自己采坑,于是郁闷了一下午,刚刚回到家,试想想,要不试试英文网,毕竟Swift就是人家老外的, 说不定老外会告诉你,怎么取得数据并绑定Tab