飞翔的鱼 飞翔的鱼
首页
  • Http
  • Ajax
  • Node
  • MongoDB
  • Axios
  • Git
  • Webpack
  • React
  • Vue
  • Uni-app
  • 性能优化
  • 移动端
  • HTML
  • CSS
  • stylus
  • 常用
  • 实战
  • 实用网站
  • 资源库
  • Vue专区
关于
  • css效果
  • js效果
  • 拥抱生活
  • 生活知道
GitHub (opens new window)

Wang

飞翔的鱼
首页
  • Http
  • Ajax
  • Node
  • MongoDB
  • Axios
  • Git
  • Webpack
  • React
  • Vue
  • Uni-app
  • 性能优化
  • 移动端
  • HTML
  • CSS
  • stylus
  • 常用
  • 实战
  • 实用网站
  • 资源库
  • Vue专区
关于
  • css效果
  • js效果
  • 拥抱生活
  • 生活知道
GitHub (opens new window)
  • Http

  • Ajax

  • Node

  • MongoDB

  • Axios

    • 测试
      • 1. axios的特点
      • 2.基本使用
        • 2.1安装
        • 2.2使用
      • 3. axios常用语法
        • 3.1简写方式:
        • 3.2执行多个并发请求
        • 3.3全局配置axios
        • 3.4创建实例(相当于配置局部axios)
        • 3.5拦截器
      • 4. 源码难点与流程分析
  • Git

  • Webpack

  • React

  • Vue

  • Uni-app

  • 性能优化

  • 移动端

  • 前端
  • Axios
wang jiaqi
2021-03-16

测试

# axios从入门到源码分析

# 1. axios的特点

基于promise的封装XHR的异步ajax请求库
浏览器端/node端都可以使用
支持请求/响应拦截器
支持请求取消
请求/响应数据转换
批量发送多个请求

# 2.基本使用

# 2.1安装

//使用 cdn:
<script src="https://unpkg.com/axios/dist/axios.min.js"></script>
//使用npm
npm install axios
//使用bower
bower install axios
//使用yarn
yarn add axios
1
2
3
4
5
6
7
8

# 2.2使用

axios({
        url:"http://localhost:3000/",    //请求的url
        method:"get",       //请求方式
        params:{id:1}       //请求参数

    })
        .then((value) => {
        console.log(value)
    })
1
2
3
4
5
6
7
8
9

# 3. axios常用语法

axios(config): 通用/最本质的发任意类型请求的方式
axios(url[, config]): 可以只指定url发get请求
axios.request(config): 等同于axios(config)
axios.get(url[, config]): 发get请求
axios.delete(url[, config]): 发delete请求
axios.post(url[, data, config]): 发post请求
axios.put(url[, data, config]): 发put请求

axios.defaults.xxx: 请求的默认全局配置
axios.interceptors.request.use(): 添加请求拦截器
axios.interceptors.response.use(): 添加响应拦截器

axios.create([config]): 创建一个新的axios(它没有下面的功能)

axios.Cancel(): 用于创建取消请求的错误对象
axios.CancelToken(): 用于创建取消请求的token对象
axios.isCancel(): 是否是一个取消请求的错误
axios.all(promises): 用于批量执行多个异步请求
axios.spread(): 用来指定接收所有成功数据的回调函数的方法

# 3.1简写方式:

//发送get请求
axios.get("http://localhost:3000/", {params: {id: 1, name: "zhangsan"}})
        .then(value => {
                console.log(value)
            }
        )
        .catch(reason => {
                console.log(reason)
            }
        )
1
2
3
4
5
6
7
8
9
10
/发送post请求
axios.post("http://localhost:3000/", "id=1&name=zhangsan")
        .then(value => {
                console.log(value)
            }
        )
        .catch(reason => {
                console.log(reason)
            }
        )
1
2
3
4
5
6
7
8
9
10

# 3.2执行多个并发请求

function getUser1() {
        return axios.get('http://localhost:3000/');
    }

function getUser2() {
        return axios.post('http://localhost:3000/');
    }

    axios.all([getUser1(), getUser2()])
        .then(axios.spread(		//使用axios.spread方法将all返回的数组处理成Object对象
        (value1, value2) => {		
            console.log(value1)
            console.log(value2)
        }))
        .catch((reason) => {
            console.log(reason)
        })

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18

# 3.3全局配置axios

//假设完整的url为'https://api.example.com/get?id=1'
axios.defaults.baseURL = 'https://api.example.com';   //配置公共的url
axios.defaults.timeout=5							  //配置响应超时时间
axios.get("/get?id=1")
  .then(value=>{
    console.log(value)
  })
  .catch((reason) => {
     console.log(reason)
   });
1
2
3
4
5
6
7
8
9
10

# 3.4创建实例(相当于配置局部axios)

//完整url为'https://some-domain.com/api/get?id=1'
let axios1 = axios.create({
  baseURL: 'https://some-domain.com/api',
  timeout: 1000,
  headers: {'X-Custom-Header': 'foobar'}   //请求头
});
//对实例的应用
axios1.get("/get?id=1")
.then(value=>{
    console.log(value)
  })
  .catch((reason) => {
     console.log(reason)
   });
1
2
3
4
5
6
7
8
9
10
11
12
13
14

# 3.5拦截器

拦截器是在发送请求或者接收响应前, 可以对请求或响应进行检查或配置进行特定处理的函数,

1). 请求拦截器: 在真正发请求前, 可以对请求进行检查或配置进行特定处理的函数, 包括成功/失败的函数, 传递的必须是config 2). 响应拦截器: 在请求返回后, 可以对响应数据进行特定处理的函数, 包括成功/失败的函数, 传递的默认是response

// 添加请求拦截器
    axios.interceptors.request.use((config) => {
        console.log(config)  //在请求直接做的事情
        return config   //将请求return出去,让then方法调用
    }, (error)=> {
        // 对请求错误做些什么
        return Promise.reject(error);
    });

    // 添加响应拦截器
    axios.interceptors.response.use((config) => {
        console.log(config)  //在相应成功做的事情
        return config   //将请求return出去,让then方法调用
    }, (error)=> {
        // 对请求错误做些什么
        return Promise.reject(error);
    });

    // axios请求
    axios.get("http://localhost:3000/get?id=1",)
    .then((value) => {
    })
    .catch((reason) => {
    })
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24

# 4. 源码难点与流程分析

1. axios与Axios的关系
    axios函数对应的是Axios.prototype.request方法通过bind(Axiox的实例)产生的函数
    axios有Axios原型上的所有发特定类型请求的方法: get()/post()/put()/delete()
    axios有Axios的实例上的所有属性: defaults/interceptors
    后面又添加了create()/CancelToken()/all()
2. axios.create()返回的对象与axios的区别
    1). 相同: 
        都是一个能发任意请求的函数: request(config)
        都有发特定请求的各种方法: get()/post()/put()/delete()
        都有默认配置和拦截器的属性: defaults/interceptors
    2). 不同:
        默认匹配的值不一样
        instance没有axios后面添加的一引起方法: create()/CancelToken()/all()
3. axios发请求的流程
    1). 整体流程: request(config)  ===> dispatchRequest(config) ===> xhrAdapter(config)
    2). request(config): 将请求拦截器 / dispatchRequest() / 响应拦截器 通过promise链串连起来, 返回promise
    3). dispatchRequest(config): 转换请求数据 ===> 调用xhrAdapter()发请求 ===> 请求返回后转换响应数据. 返回promise
    4). xhrAdapter(config): 创建XHR对象, 根据config进行相应设置, 发送特定请求, 并接收响应数据, 返回promise 
4. axios的请求/响应拦截器是什么?
    1). 请求拦截器: 在真正发请求前, 可以对请求进行检查或配置进行特定处理的函数, 
               包括成功/失败的函数, 传递的必须是config
    2). 响应拦截器: 在请求返回后, 可以对响应数据进行特定处理的函数,
               包括成功/失败的函数, 传递的默认是response
5. axios的请求/响应数据转换器是什么?
    1). 请求转换器: 对请求头和请求体数据进行特定处理的函数
        setContentTypeIfUnset(headers, 'application/json;charset=utf-8');
        return JSON.stringify(data)
    2). 响应转换器: 将响应体json字符串解析为js对象或数组的函数
        response.data = JSON.parse(response.data)
6. response的整体结构
    {
        data,
        status,
        statusText,
        headers,
        config,
        request
    }
7. error的整体结构
    {
        message,
        request,
        response
    }
8. 如何取消未完成的请求
    1).当配置了cancelToken对象时, 保存cancel函数
        创建一个用于将来中断请求的cancelPromise
        并定义了一个用于取消请求的cancel函数
        将cancel函数传递出来
    2.调用cancel()取消请求
        执行cacel函数, 传入错误信息message
        内部会让cancelPromise变为成功, 且成功的值为一个Cancel对象
        在cancelPromise的成功回调中中断请求, 并让发请求的proimse失败, 失败的reason为Cacel对象
编辑 (opens new window)
#a#x#i#o#s# #-
上次更新: 2021/07/01, 20:33:02
mongodb
git

← mongodb git→

最近更新
01
数组常用方法
05-21
02
边框
04-30
03
js1
04-29
更多文章>
Theme by Vdoing | Copyright © 2021-2021 本博客仅仅作为自己日常学习记录笔记使用
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式
×