axios队列 vue_vue axios全攻略

不再继续维护vue-resource,并推荐大家使用 axios 开始,axios 被越来越多的人所了解。本来想在网上找找详细攻略,突然发现,axios 的官方文档本身就非常详细!!有这个还要什么自行车!!所以推荐大家学习这种库,最好详细阅读其官方文档。大概翻译了一下 axios 的官方文档,相信大家只要吃透本文再加以实践,axios 就是小意思啦!!

如果您觉得本文对您有帮助,不妨点个赞或关注收藏一下,您的鼓励对我非常重要。

axios 简介

axios 是一个基于Promise 用于浏览器和 nodejs 的 HTTP 客户端,它本身具有以下特征:

从浏览器中创建 XMLHttpRequest

从 node.js 发出 http 请求

支持 Promise API

拦截请求和响应

转换请求和响应数据

取消请求

自动转换JSON数据

浏览器兼容性

991b798df8c9a528.png

引入方式:

1

2

3

4

5

$ npm install axios

$ cnpm install axios //taobao源

$ bower install axios

或者使用cdn:

举个栗子:

执行 GET 请求

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

// 向具有指定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);

});

执行 POST 请求

1

2

3

4

5

6

7

8

9

10

axios.post('/user', {

firstName: 'Fred',

lastName: 'Flintstone'

})

.then(function (response) {

console.log(response);

})

.catch(function (error) {

console.log(error);

});

执行多个并发请求

1

2

3

4

5

6

7

8

9

10

11

12

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 API

可以通过将相关配置传递给 axios 来进行请求。

axios(config)

1

2

3

4

5

6

7

8

9

// 发送一个 POST 请求

axios({

method: 'post',

url: '/user/12345',

data: {

firstName: 'Fred',

lastName: 'Flintstone'

}

});

axios(url[, config])

1

2

// 发送一个 GET 请求 (GET请求是默认请求模式)

axios('/user/12345');

请求方法别名

为了方便起见,已经为所有支持的请求方法提供了别名。

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]])

注意

当使用别名方法时,不需要在config中指定url,method和data属性。

并发

帮助函数处理并发请求。

axios.all(iterable)

axios.spread(callback)

创建实例

您可以使用自定义配置创建axios的新实例。

axios.create([config])

1

2

3

4

5

var instance = axios.create({

baseURL: 'https://some-domain.com/api/',

timeout: 1000,

headers: {'X-Custom-Header': 'foobar'}

});

实例方法

可用的实例方法如下所示。 指定的配置将与实例配置合并。

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]])

请求配置

这些是用于发出请求的可用配置选项。 只有url是必需的。 如果未指定方法,请求将默认为GET。

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

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92

93

94

95

96

97

98

99

100

101

102

103

104

105

106

107

108

109

110

111

112

113

114

115

116

117

118

119

120

121

122

123

124

125

126

127

128

129

130

131

{

// `url`是将用于请求的服务器URL

url: '/user',

// `method`是发出请求时使用的请求方法

method: 'get', // 默认

// `baseURL`将被添加到`url`前面,除非`url`是绝对的。

// 可以方便地为 axios 的实例设置`baseURL`,以便将相对 URL 传递给该实例的方法。

baseURL: 'https://some-domain.com/api/',

// `transformRequest`允许在请求数据发送到服务器之前对其进行更改

// 这只适用于请求方法'PUT','POST'和'PATCH'

// 数组中的最后一个函数必须返回一个字符串,一个 ArrayBuffer或一个 Stream

transformRequest: [function (data) {

// 做任何你想要的数据转换

return data;

}],

// `transformResponse`允许在 then / catch之前对响应数据进行更改

transformResponse: [function (data) {

// Do whatever you want to transform the data

return data;

}],

// `headers`是要发送的自定义 headers

headers: {'X-Requested-With': 'XMLHttpRequest'},

// `params`是要与请求一起发送的URL参数

// 必须是纯对象或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

// - Browser only: FormData, File, Blob

// - Node only: Stream

data: {

firstName: 'Fred'

},

// `timeout`指定请求超时之前的毫秒数。

// 如果请求的时间超过'timeout',请求将被中止。

timeout: 1000,

// `withCredentials`指示是否跨站点访问控制请求

// should be made using credentials

withCredentials: false, // default

// `adapter'允许自定义处理请求,这使得测试更容易。

// 返回一个promise并提供一个有效的响应(参见[response docs](#response-api))

adapter: function (config) {

/* ... */

},

// `auth'表示应该使用 HTTP 基本认证,并提供凭据。

// 这将设置一个`Authorization'头,覆盖任何现有的`Authorization'自定义头,使用`headers`设置。

auth: {

username: 'janedoe',

password: 's00pers3cret'

},

// “responseType”表示服务器将响应的数据类型

// 包括 'arraybuffer', 'blob', 'document', 'json', 'text', 'stream'

responseType: 'json', // default

//`xsrfCookieName`是要用作 xsrf 令牌的值的cookie的名称

xsrfCookieName: 'XSRF-TOKEN', // default

// `xsrfHeaderName`是携带xsrf令牌值的http头的名称

xsrfHeaderName: 'X-XSRF-TOKEN', // default

// `onUploadProgress`允许处理上传的进度事件

onUploadProgress: function (progressEvent) {

// 使用本地 progress 事件做任何你想要做的

},

// `onDownloadProgress`允许处理下载的进度事件

onDownloadProgress: function (progressEvent) {

// Do whatever you want with the native progress event

},

// `maxContentLength`定义允许的http响应内容的最大大小

maxContentLength: 2000,

// `validateStatus`定义是否解析或拒绝给定的promise

// HTTP响应状态码。如果`validateStatus`返回`true`(或被设置为`null` promise将被解析;否则,promise将被

// 拒绝。

validateStatus: function (status) {

return status >= 200 && status < 300; // default

},

// `maxRedirects`定义在node.js中要遵循的重定向的最大数量。

// 如果设置为0,则不会遵循重定向。

maxRedirects: 5, // 默认

// `httpAgent`和`httpsAgent`用于定义在node.js中分别执行http和https请求时使用的自定义代理。

// 允许配置类似`keepAlive`的选项,

// 默认情况下不启用。

httpAgent: new http.Agent({ keepAlive: true }),

httpsAgent: new https.Agent({ keepAlive: true }),

// 'proxy'定义代理服务器的主机名和端口

// `auth`表示HTTP Basic auth应该用于连接到代理,并提供credentials。

// 这将设置一个`Proxy-Authorization` header,覆盖任何使用`headers`设置的现有的`Proxy-Authorization` 自定义 headers。

proxy: {

host: '127.0.0.1',

port: 9000,

auth: : {

username: 'mikeymike',

password: 'rapunz3l'

}

},

// “cancelToken”指定可用于取消请求的取消令牌

// (see Cancellation section below for details)

cancelToken: new CancelToken(function (cancel) {

})

}

使用 then 时,您将收到如下响应:

1

2

3

4

5

6

7

8

axios.get('/user/12345')

.then(function(response) {

console.log(response.data);

console.log(response.status);

console.log(response.statusText);

console.log(response.headers);

console.log(response.config);

});

配置默认值

您可以指定将应用于每个请求的配置默认值。

全局axios默认值

1

2

3

axios.defaults.baseURL = 'https://api.example.com';

axios.defaults.headers.common['Authorization'] = AUTH_TOKEN;

axios.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded';

自定义实例默认值

1

2

3

4

5

6

7

//在创建实例时设置配置默认值

var instance = axios.create({

baseURL:'https://api.example.com'

});

//在实例创建后改变默认值

instance.defaults.headers.common ['Authorization'] = AUTH_TOKEN;

配置优先级顺序

配置将与优先顺序合并。 顺序是lib / defaults.js中的库默认值,然后是实例的defaults属性,最后是请求的config参数。 后者将优先于前者。 这里有一个例子。

1

2

3

4

5

6

7

8

9

10

11

12

//使用库提供的配置默认值创建实例

//此时,超时配置值为`0`,这是库的默认值

var instance = axios.create();

//覆盖库的超时默认值

//现在所有请求将在超时前等待2.5秒

instance.defaults.timeout = 2500;

//覆盖此请求的超时,因为它知道需要很长时间

instance.get('/ longRequest',{

timeout:5000

});

拦截器

你可以截取请求或响应在被 then 或者 catch 处理之前

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

//添加请求拦截器

axios.interceptors.request.use(function(config){

//在发送请求之前做某事

return config;

},function(error){

//请求错误时做些事

return Promise.reject(error);

});

//添加响应拦截器

axios.interceptors.response.use(function(response){

//对响应数据做些事

return response;

},function(error){

//请求错误时做些事

return Promise.reject(error);

});

如果你以后可能需要删除拦截器。

1

2

var myInterceptor = axios.interceptors.request.use(function () {/*...*/});

axios.interceptors.request.eject(myInterceptor);

你可以将拦截器添加到axios的自定义实例。

1

2

var instance = axios.create();

instance.interceptors.request.use(function () {/*...*/});

处理错误

1

2

3

4

5

6

7

8

9

10

11

12

13

14

axios.get('/ user / 12345')

.catch(function(error){

if(error.response){

//请求已发出,但服务器使用状态代码进行响应

//落在2xx的范围之外

console.log(error.response.data);

console.log(error.response.status);

console.log(error.response.headers);

} else {

//在设置触发错误的请求时发生了错误

console.log('Error',error.message);

}}

console.log(error.config);

});

您可以使用validateStatus配置选项定义自定义HTTP状态码错误范围。

1

2

3

4

5

axios.get('/ user / 12345',{

validateStatus:function(status){

return status < 500; //仅当状态代码大于或等于500时拒绝

}}

})

消除

您可以使用取消令牌取消请求。

axios cancel token API基于可取消的promise提议,目前处于阶段1。

您可以使用CancelToken.source工厂创建一个取消令牌,如下所示:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

var CancelToken = axios.CancelToken;

var source = CancelToken.source();

axios.get('/user/12345', {

cancelToken: source.token

}).catch(function(thrown) {

if (axios.isCancel(thrown)) {

console.log('Request canceled', thrown.message);

} else {

// 处理错误

}

});

//取消请求(消息参数是可选的)

source.cancel('操作被用户取消。');

您还可以通过将执行器函数传递给CancelToken构造函数来创建取消令牌:

1

2

3

4

5

6

7

8

9

10

11

12

var CancelToken = axios.CancelToken;

var cancel;

axios.get('/ user / 12345',{

cancelToken:new CancelToken(function executor(c){

//一个执行器函数接收一个取消函数作为参数

cancel = c;

})

});

// 取消请求

clear();

注意:您可以使用相同的取消令牌取消几个请求。

使用application / x-www-form-urlencoded格式

默认情况下,axios将JavaScript对象序列化为JSON。 要以应用程序/ x-www-form-urlencoded格式发送数据,您可以使用以下选项之一。

浏览器

在浏览器中,您可以使用URLSearchParams API,如下所示:

1

2

3

4

var params = new URLSearchParams();

params.append('param1', 'value1');

params.append('param2', 'value2');

axios.post('/foo', params);

请注意,所有浏览器都不支持URLSearchParams,但是有一个polyfill可用(确保polyfill全局环境)。

或者,您可以使用qs库对数据进行编码:

1

2

var qs = require('qs');

axios.post('/foo', qs.stringify({ 'bar': 123 });

Node.js

在node.js中,可以使用querystring模块,如下所示:

1

2

var querystring = require('querystring');

axios.post('http://something.com/', querystring.stringify({ foo: 'bar' });

你也可以使用qs库。

Promise

axios 依赖本机要支持ES6 Promise实现。 如果您的环境不支持ES6 Promises,您可以使用polyfill。

TypeScript

axios包括TypeScript定义。

1

2

import axios from 'axios';

axios.get('/user?ID=12345');

axios在很大程度上受到Angular提供的$http服务的启发。 最终,axios努力提供一个在Angular外使用的独立的$http-like服务。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/359952.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

探测服务器操作系统,探测服务器操作系统工具

探测服务器操作系统工具 内容精选换一换lib库获取方式不同&#xff0c;编译环境配置方法不同&#xff0c;下面分别介绍。根据Mind Studio安装服务器操作系统及架构与硬件环境是否相同&#xff0c;编译环境分为如下两种场景&#xff1a;若Mind Studio安装服务器操作系统及架构与…

Java Web App体系结构

我曾经利用Servlet&#xff0c;JSP&#xff0c;JAX-RS&#xff0c;Spring框架&#xff0c;Play框架&#xff0c;带有Facelets的JSF和一些Spark框架。 以我的拙见&#xff0c;所有这些解决方案都远非面向对象和优雅的。 它们都充满了静态方法&#xff0c;无法测试的数据结构和肮…

Mono for Android 篇二 使用Spinner 实现下拉列表读取Browser.BookmarksUri

http://www.cnblogs.com/ivanyb/archive/2013/03/05/2944818.html 1、首先在VS2010里面创建一个Android Application 简单说明一下解决方案中各个文件的作用&#xff1a; AndroidManifest.xml&#xff1a;项目环境配置文件&#xff0c;指明了使用Android SDK的版本&#xff0c;…

mysql磁盘临时表清理_mysql 创建大量磁盘临时表

发现 mysql 中创建的临时表基本都是磁盘临时表&#xff0c;对此进行排查。最后为临时表机制说明。通过查看 mysql 状态变量&#xff0c;看到创建的临时表基本都是磁盘临时表。查看临时表配置&#xff0c;默认配置 16M&#xff0c;配置并没有问题。创建两个表&#xff0c;做一个…

吃鸡服务器8月10日维护,《黑潮之上》2021年8月10日不停服维护公告

在黑潮之上手游中2021年8月10日更新了哪些有趣的内容呢&#xff1f;想了解本次更新情况如何的小伙伴们&#xff0c;接下来就让我们一起来看一下吧&#xff01;各位接触者:为了提供良好的游戏体验&#xff0c;保证服务器稳定运行&#xff0c;《黑潮之上》将于2021年8月10日早5:0…

资格赛:题目1:同构

时间限制:2000ms单点时限:1000ms内存限制:256MB描述 给定2个树A和B&#xff0c;保证A的节点个数>B的节点个数。 现在你需要对树A的边进行二染色。 一个好的染色方案&#xff0c;指不存在一个树A中的连通块&#xff0c;同时满足以下2个条件 1. 其中只有同色的边 2. 和B同构。…

java 获取mysql链接_Java中如何获取mysql连接的3种方法总结

前言本文主要来说说三种 Java 中获取 mysql 连接的方式&#xff0c;分享出来供大家参考学习&#xff0c;下面话不多说了&#xff0c;来一起看看详细的介绍&#xff1a;第一种&#xff1a;传统的连接方式&#xff1b;第二种&#xff1a;读取配置文件方式&#xff1b;第三种&…

JavaScript学习总结(六)——JavaScript判断数据类型总结

最近做项目中遇到了一些关于javascript数据类型的判断处理&#xff0c;上网找了一下资料&#xff0c;并且亲自验证了各种数据类型的判断&#xff0c;在此做一个总结吧&#xff01; 一、JS中的数据类型 1.数值型&#xff08;Number&#xff09;&#xff1a;包括整数、浮点数。 2…

material 项目_Web开发必备的 10 个开源项目,不用自己亲自造轮子!

来自&#xff1a;Java and Python君Web 开发中几乎的平台都需要一个后台管理&#xff0c;但是从零开发一套后台控制面板并不容易&#xff0c;幸运的是有很多开源免费的后台控制面板可以给开发者使用&#xff0c;那么有哪些优秀的开源免费的控制面板呢&#xff1f;我在 Github 上…

SVN部署(本地)

1.安装TortoiseSVN 2.建立Repository。在F:/下建立文件夹SVN_NATIVE_REPOSITORY&#xff0c; —— 》 3.在其他任意路径建立任意名称的路径&#xff0c;这里为D:\MSVC Project\SVN_WORK&#xff0c;确保该文件夹为空 右键单击&#xff0c;点击SVN Checkout&#xff0c; 第一行 …

mysql sqlserver schema_MySQL数据库数据迁移到SQLserver

最近因工作需要&#xff0c;需要将mysql数据库迁移到sqlserver&#xff0c;仅仅是数据迁移&#xff0c;因此相对比较简单。对于mysql迁移到sqlserver&#xff0c;我们需要使用到mysql odbc驱动&#xff0c;然后透过sqlserver链接服务器的方式来访问mysql。具体见下文描述。一、…

mysql客户端安装错误_windows下mysql 5.7以上版本安装及遇到的问题

(原)早些前用window安装mysql挺简单的&#xff0c;一个安装程序&#xff0c;一路下一步。2006的5.0版本&#xff0c;确实太早了点。于是官网上又下了一个版本&#xff0c;windows也是提供了二个版本Installer(安装)版和Archive(文档)版。Installer版本的后缀是.msi&#xff0c;…

sklearn中eof报错_sklearn中的数据预处理和特征工程

小伙伴们大家好~o(&#xffe3;▽&#xffe3;)ブ&#xff0c;今天我们看一下Sklearn中的数据预处理和特征工程&#xff0c;老规矩还是先强调一下&#xff0c;我的开发环境是Jupyter lab&#xff0c;所用的库和版本大家参考&#xff1a;Python 3.7.1&#xff08;你的版本至少要…

sql显示前10行数据_SPL 简化 SQL 案例详解:计算各组前 N 行

取出各组的前N行数据是较常见的运算&#xff0c;比如&#xff1a;每个月每种产品销量最高的五天是哪五天&#xff0c;每位员工涨薪最多的一次是哪次&#xff0c;高尔夫会员成绩最差的三次是哪三次&#xff0c;等等。在SQL中&#xff0c;这类运算要用窗口函数以及keep/top/rownu…

4月21日会议总结(整理—祁子梁)

会议成果&#xff1a; 1.今天我们确定了软件版本的时间alphe版在12周做出来&#xff0c;在我们内部测试基本通过。 bate版在13周发布和其他组作交换测试&#xff0c;在14周release版发布并给其他人使用体验准备15周的演讲。 2.同时确定了部分功能实现顺序&#xff0c;”谁是卧底…

如何查看mysql的gtid_汇总丨MySQL GTID技术点,看这一篇就够了!

mysql> SELECT * FROM mysql.gtid_executed;mysql.gtid_executed表是由MySQL服务器提供给内部使用的。它允许副本在副本上禁用二进制日志记录时使用GTIDs&#xff0c;并允许在二进制日志丢失时保留GTID状态。RESET MASTER命令&#xff0c;gtid_executed表将被清除。服务意外…

vb.net详解MDI窗体操作方法

MDI窗体可以避免打开窗体的时候被无数个子窗体困扰&#xff0c;我将为大家一一的介绍一下vb.net中MDI窗体的操作方法 一、如何创建MDI窗体&#xff1f; 1、创建mdi主窗体 新建建立一个默认空白的Windows应用程序&#xff0c;在Form1窗体的属性窗口中找到IsMDIContainer 属性&am…

lokijs可以用mysql_JavaScript实现的内存数据库LokiJS介绍和入门实例_javascript技巧

LokiJS是一个内存数据库&#xff0c;将性能考虑放在第一位。LokiJS支持索引和更快的文档访问&#xff0c;执行性能非常好(近50万OPS/秒)。其内置DynamicView类可以用于数据子集的索引&#xff0c;甚至获取更快的性能。*阅读这篇文章来看一看LokiJS的性能表现。LokiJS支持collec…

python读取word图片_Python中如何读取Word中的图片

Python能够快速的编写、调试&#xff0c;用来提取各类软件中的图片再好不过了。今天小编就为大家带来在Python中提取Word图片的方法。方法需要批量的修改文件后缀名&#xff0c;并且解压之后将图片拷贝到需要存放的地方&#xff0c;然后将该文件夹清空留作下次的路径&#xff0…

PAT 1074. Reversing Linked List (25)

Given a constant K and a singly linked list L, you are supposed to reverse the links of every K elements on L. For example, given L being 1→2→3→4→5→6, if K 3, then you must output 3→2→1→6→5→4; if K 4, you must output 4→3→2→1→5→6. Input Sp…