hn-failte's blog hn-failte's blog
首页
  • 前端文章

    • JavaScript
    • Vue
    • React
    • Webpack
    • 混合开发
  • 学习笔记

    • 《JavaScript教程》笔记
    • 《JavaScript高级程序设计》笔记
    • 《ES6 教程》笔记
    • 《Vue》笔记
    • 《React》笔记
    • 《TypeScript 从零实现 axios》
    • 《Git》学习笔记
    • TypeScript笔记
    • JS设计模式总结笔记
  • HTML&CSS
  • HTML
  • CSS
  • CSS预处理
  • 技术文档
  • GitHub技巧
  • Nodejs
  • 博客搭建
  • 算法
  • 数据库
  • 操作系统
  • 工具
  • 学习
  • 面试
  • 心情杂货
  • 前端相关
  • 实用技巧
  • 友情链接
关于
收藏
  • 分类
  • 标签
  • 归档
GitHub (opens new window)

hn-failte

前端cv仔
首页
  • 前端文章

    • JavaScript
    • Vue
    • React
    • Webpack
    • 混合开发
  • 学习笔记

    • 《JavaScript教程》笔记
    • 《JavaScript高级程序设计》笔记
    • 《ES6 教程》笔记
    • 《Vue》笔记
    • 《React》笔记
    • 《TypeScript 从零实现 axios》
    • 《Git》学习笔记
    • TypeScript笔记
    • JS设计模式总结笔记
  • HTML&CSS
  • HTML
  • CSS
  • CSS预处理
  • 技术文档
  • GitHub技巧
  • Nodejs
  • 博客搭建
  • 算法
  • 数据库
  • 操作系统
  • 工具
  • 学习
  • 面试
  • 心情杂货
  • 前端相关
  • 实用技巧
  • 友情链接
关于
收藏
  • 分类
  • 标签
  • 归档
GitHub (opens new window)
  • 技术文档

  • GitHub技巧

  • Nodejs

  • 博客搭建

  • Algorithm

  • DataBase

  • OS

  • Tools

    • Axios基本使用
      • 特点
      • 支持的请求方式
      • 请求方法
      • 支持的方法
      • 配置设置
      • 使用拦截器重写axios
      • 取消请求
        • 使用场景
        • 使用
        • 原生xhr的取消
    • 搭建个人博客网站
    • VSCode插件推荐
    • web浏览器进化简史
  • 技术
  • Tools
hn-failte
2020-03-31

Axios基本使用

# Axios基本使用

以前使用Axios时,只知道Axios可以重写,平时也只管用get、post,直到我有一天发现,Axios居然还有个可以取消请求的方法,这才意识到,我对Axios的了解还不够深......

# 特点

1、基于Promise的一个http请求方法 2、客户端会基于xhr对象请求 3、服务端会基于http进行请求 4、基于Promise 5、支持转换为json数据类型 6、支持数据劫持 7、具有TypeScript定义

# 支持的请求方式

1、delete

2、get

3、head

4、options

5、post

6、put

7、patch

# 请求方法

1、axios

axios本身就是一个请求方法,能定义各种请求类型

axios({ method: "", url: "", params: "", // delete、get、head、options参数置于此 data: "", //post、put、patch请求参数置于此 headers: "", timeout: "", //延时(ms) baseURL: "", withCredentials: false //是否携带cookie }) .then() .catch()

2、axios.method

axios支持的请求方式,都可以直接通过axois.method使用

根据data的携带方式,分为一下两种:

一类,delete、get、head、options,代表方式 get:

axios.get("/api/1", {
    params: {},
    header: {}
})
.then(res=>{console.log(res)})
.catch(rej=>{console.log(rej)})
1
2
3
4
5
6

一类,post、put、patch,代表方式 post:

axios.get("/api/1", {})
.then(res=>{console.log(res)})
.catch(rej=>{console.log(rej)})
1
2
3

# 支持的方法

1、create

用于重写axios

2、cancel

用于取消请求

3、CancelToken

取消请求类

4、isCancel

取消状态获取

5、all

并行请求,返回数组

6、spread

用于处理并行请求后的数据

axios
    .all([axios.get('/api/1'), axios.get('/api/2')])
    .then(axios.spread((res1, res2)=>{
        console.log(res1)
        console.log(res2)
    }))
1
2
3
4
5
6

# 配置设置

获取:

console.log(axios.default)
console.log(axios.defaults.baseURL)
1
2

设置:

axios.defaults.baseURL='http://www.baidu.com/'
1

# 使用拦截器重写axios

import axios from "axios"

const instance = axios.create({
    // 请求超时设置
    timeout: 5000,
    // 响应的最大长度
    maxContentLength: 1024000,
    // 响应的数据类型
    responseType: 'json',
    // 请求成功的判断
    validateStatus: status => status >= 200 && status < 300,
    // 最大重定向次数
    maxRedirects: 5,
    // 允许跨域设置Cookie
    withCredentials: false
})

// 请求头拦截
instance.interceptors.request.use((request)=>{
    if(request.method == "post"){
        request.data = request.data;
    } else if(request.method == "get"){
        request.params = {...request.data}
    }
    return request;
}, (rej)=>{
    return Promise.reject(rej)
})

// 响应头拦截
instance.interceptors.response.use((response)=>{
    if(response.statusText === "ok"){
        return response.data;
    }
}, (rej)=>{
    return Promise.reject(rej)
})

export default instance;
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

# 取消请求

# 使用场景

1、用于在指定时间内返回请求结果。

2、用于发起请求后,希望可以取消请求。

3、用于频繁请求中,页面对数据进行了更新后,请求数据时,但是再次更新了数据,此时需要取消请求。

# 使用

场景:指定时间内返回请求结果

使用方法1:

const axios = require("axios");
const fs = require("fs")
const CancelToken = axios.CancelToken;
const source = CancelToken.source();
axios.get("http://www.baidu.com/", { cancelToken: source.token }).then(
  res => {
    fs.writeFileSync("./baidu.html", res, "utf8");
  },
  rej => {
    console.log(rej);
  }
);
setTimeout(() => {
  source.cancel("未在规定时间内响应,取消请求");
}, 100);
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15

使用方法2:

const axios = require("axios");
const fs = require("fs");
const CancelToken = axios.CancelToken;
let cancel;

axios
  .get("http://www.baidu.com/", {
    cancelToken: new CancelToken(_cancel => (cancel = _cancel))
  })
  .then(
    res => {
      fs.writeFileSync("./baidu.html", res, "utf8");
    },
    rej => {
      console.log(rej);
    }
  );

setTimeout(() => {
  cancel("未在规定时间内响应,取消请求");
}, 100);
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21

# 原生xhr的取消

xhr.abort()

编辑 (opens new window)
#Axios
上次更新: 2021/08/05, 12:37:41
Windows命令控制台默认编码问题
搭建个人博客网站

← Windows命令控制台默认编码问题 搭建个人博客网站→

最近更新
01
基于 Taro 的微信小程序优化指南
02-16
02
搭建一个极简混合开发架构
08-03
03
使用State Hook
04-06
更多文章>
Theme by Vdoing | Copyright © 2017-2023 hn-failte | MIT License
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式