Vuejs第七篇(网络封装axios)

目录(点击下面链接跳转到对应知识点)

一、网络请求模块的选择-axios(了解)

返回目录

以下知识点有兴趣的可以自己去了解了解

常见的网络请求模块,以及优缺点对比

JSONP的原理和封装

  • JSONP原理回顾
  • JSON请求封装

axios的内容详解

  • 认识axios网络模块
  • 发送基本请求
  • axios创建实例
  • axios拦截器的使用

选择什么网络模块?
请添加图片描述

介绍一下JSONP:
请添加图片描述
为什么选择axios:

  • 作者推荐和功能特点
  • 功能特点:
    • 在浏览器中发送XMLHttpRequests请求
    • 在node.js中发送http请求
    • 支持Promise API
    • 拦截请求和响应
    • 转换请求和响应数据
    • 等等

老师理解axios名称的由来:ajax io system

二、axios框架的基本使用(掌握)

返回目录

axios支持多种请求方式:

* 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:

npm install axios --save

安装后随意位置我们都可以使用:
我们在main.js中使用:
在这里插入图片描述
运行,数据请求结果:
在这里插入图片描述
刷新一下请求数据:
在这里插入图片描述
method可以定义请求的方式

我们也可以带参请求,方式一:(不推荐)
在这里插入图片描述
参数书写方式二(推荐)
在这里插入图片描述
请求结果:
在这里插入图片描述

三、axios发送并发请求(掌握)

返回目录

有时候,我们可能需求同时发送两个请求

  • 使用axios.all,可以放入多个请求的数组
    在这里插入图片描述
    在这里插入图片描述
    返回的是一个数组,我们怎么使用呢?

  • axios.all([])返回的结果是一个数组,使用axios.spread可将数组[res1,res2]展开为res1,res2

  • 当然也可以利用索引拿到
    在这里插入图片描述
    在这里插入图片描述
    拓展知识:
    对象的解构,
    数组的解构:
    在这里插入图片描述

四、axios的配置信息相关(掌握)

返回目录

在之前的示例中,我们的BaseURL是固定的

  • 事实上,在开发中可能很多参数都是固定的
  • 这个时候我们可以进行一些抽取,也可以利用axios的全局配置
axios.defaults.baseURL = 'http://123.207.32.32:8000'
axios.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded'

全局配置代码展示:
在这里插入图片描述
运行测试:
在这里插入图片描述
常见的配置选项:

请求地址

url:'/user'

请求类型

method:'get'

请求路径

baseURL:'http://www.mt.com/api'

请求前的数据处理

transformRequest:[function(data){}]

请求后的数据处理

transformResponse:[function(data){}]

自定义的请求头

headers:{'x-Requested-With':'XMLHttpRequest'}

URL查询对象

params:{id:12}

请添加图片描述
注意点:当请求类型为get请求的时候,使用params:{},当请求类型为post的时候用data:{}

五、axios的实例和模块封装(掌握)

返回目录

为什么要创建axios实例:

  • 当我们从axios模块中导入对象时,使用的实例是默认实例
  • 当给该实例设置一些默认配置时,这些配置就被固定下来了
  • 但是后续开发中,某些配置可能会不太一样
  • 比如某些请求需要使用特定的baseURL或者timeout或者content-Type等
  • 这个时候,我们就可以创建新的实例,并且传入属于该实例的配置信息

代码体验1:

// 4.创建对应的axios的实例
const instance1=axios.create({
  baseURL:'http://123.207.32.32:8000',
  timeout:5000
})

instance1({
  url:'/home/multidata',
}).then(res=>{
  console.log(res)
})

instance1({
  url:'/home/data',
  params:{
    type: 'sell',
    page: 5
  }
}).then(rest=>{
  console.log(rest)
})

在这里插入图片描述
运行:
在这里插入图片描述
刷新:
在这里插入图片描述
代码体验2:服务器访问地址不同的全局配置
在这里插入图片描述

const instance2=axios.create({
  baseURL:'http://222.111.33.33:8000',
  timeout:10000,
  headers:{}
})

当我们进行开发的时候,并不是每个组件都会写上网络请求的,我们最好把所有的网络请求都放到一个文件,再利用框架进一步封装
第一步:在src包下建立network包,并在此包下建立request.js文件:
在这里插入图片描述
第二步:代码示例(模块化封装与数据回调获取一)
在这里插入图片描述

import axios from "axios";

export function request(config,success,failure) {
  // 1.创建axios的实例
  const instance = axios.create({
    baseURL:'http://123.207.32.32:8000',
    timeout:5000
  })

  // 2.发送真正的网络请求
  instance(config).then(res=>{
      success(res)
  }).catch(err=>{
      failure(err)
  })
}

获取数据:(这里是在main.js中获取)
在这里插入图片描述

// 5.拿到我们的网络请求数据
import {request} from "./network/request";

request({
  url:'/home/multidata'
},res=>{
  console.log(res)
},err=>{
  console.log(err)
})

运行测试:
在这里插入图片描述
刷新:
在这里插入图片描述
第二步:代码示例(模块化封装与数据回调获取终极方案)
在这里插入图片描述
在这里插入图片描述
运行测试:
在这里插入图片描述
刷新:
在这里插入图片描述
终极方案简化版:
在这里插入图片描述

import axios from "axios";
export function request(config) {
    // 1.创建axios的实例
    const instance = axios.create({
      baseURL:'http://123.207.32.32:8000',
      timeout:5000
    })
    // 2.发送真正的网络请求
    return instance(config)//本身返回的就是一个Promise
}

在这里插入图片描述

request({
  url:'/home/multidata'
}).then(res =>{
  console.log(res);
}).catch(err=>{
  console.log(err);
})

运行测试:
在这里插入图片描述
刷新:
在这里插入图片描述

六、axios的拦截器的使用(掌握)

返回目录

axios拦截器的作用在于对于发送的请求或响应进行拦截,增加,删除,处理一些数据之后再判断是否放行。

  • axios提供了拦截器,用于我们在发送每次请求或者得到响应后,进行对应的处理
  • 如何使用拦截器呢?

四种类型:请求成功,请求失败,响应成功,响应失败
在这里插入图片描述

import axios from "axios";
export function request(config) {
  // 1.创建axios的实例
  const instance = axios.create({
    baseURL: 'http://123.207.32.32:8000',
    timeout: 5000
  })

  // 2.axios的拦截器(拦截全局:)
  instance.interceptors.request.use(config => {//请求成功执行
    console.log(config)//拦截全局信息
    //请求拦截信息做什么事:(1)比如config中一些信息不符合服务器的要求
    //(2)比如每次发送网络请求时,都希望在界面中显示一个请求的图标
    //(3)某些网络请求(比如登入(token)),必须携带一些特殊的信息
    return config //放行全局请求信息(否则其他组件无法获取响应信息)
  }, error => {//请求失败执行
    console.log(error)
  })
  //响应拦截:
  instance.interceptors.response.use(result => {
    console.log(result)
    // result.data取出data数据
    return result.data//返回拦截的响应数据
  },error => {
    console.log(error)
  })
  // 3.发送真正的网络请求
  return instance(config)//本身返回的就是一个Promise
}

在这里插入图片描述

request({
  url:'/home/multidata'
}).then(res =>{
  console.log(res);
}).catch(err=>{
  console.log(err);
})

细节运行测试就自主测试了,这里是统一返回结果:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

CharmDeer

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值