Axios学习笔记之使用方法教程


Posted in Javascript onJuly 21, 2017

前言

最近正在学习Axios,相信大家都知道Axios 是一个基于 promise 的 HTTP 库,可以用在浏览器和 node.js 中。所以本文将详细介绍关于Axios使用方法的相关内容,分享出来供大家参考学习,下面话不多说,来一起看看详细的介绍:

Axios Github

功能特性

  • 从浏览器中创建 XMLHttpRequests
  • 从 node.js 创建 http 请求
  • 支持 Promise API
  • 拦截请求和响应
  • 转换请求数据和响应数据
  • 取消请求
  • 自动转换 JSON 数据
  • 客户端支持防御 XSRF

安装

使用 bower:

$ bower install axios

使用 npm:

$ npm install axios

Example

执行 GET 请求

// 为给定 ID 的 user 创建请求
axios.get('/user?ID=12345')
 .then(function (response) {
 console.log(response);
 })
 .catch(function (error) {
 console.log(error);
 });

// 可选地,上面的请求可以这样做
axios.get('/user', {
 params: {
 ID: 12345
 }
 })
 .then(function (response) {
 console.log(response);
 })
 .catch(function (error) {
 console.log(error);
 });

执行 POST 请求

axios.post('/user', {
 firstName: 'Fred',
 lastName: 'Flintstone'
 })
 .then(function (response) {
 console.log(response);
 })
 .catch(function (error) {
 console.log(error);
 });

执行多个并发请求

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)
 // 发送 POST 请求
 axios({
 method: 'post',
 url: '/user/12345',
 data: {
 firstName: 'Fred',
 lastName: 'Flintstone'
 }
 });
 axios(url[, config])

// 发送 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]])

NOTE在使用别名方法时, url、method、data 这些属性都不必在配置中指定。

并发

处理并发请求的助手函数

axios.all(iterable)
axios.spread(callback)

创建实例

可以使用自定义配置新建一个 axios 实例

axios.create([config])
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 是必需的。如果没有指定 method,请求将默认使用 get 方法。

{
 // `url` 是用于请求的服务器 URL
 url: '/user',

 // `method` 是创建请求时使用的方法
 method: 'get', // 默认是 get

 // `baseURL` 将自动加在 `url` 前面,除非 `url` 是一个绝对 URL。
 // 它可以通过设置一个 `baseURL` 便于为 axios 实例的方法传递相对 URL
 baseURL: 'https://some-domain.com/api/',

 // `transformRequest` 允许在向服务器发送前,修改请求数据
 // 只能用在 'PUT', 'POST' 和 'PATCH' 这几个请求方法
 // 后面数组中的函数必须返回一个字符串,或 ArrayBuffer,或 Stream
 transformRequest: [function (data) {
 // 对 data 进行任意转换处理

 return data;
 }],

 // `transformResponse` 在传递给 then/catch 前,允许修改响应数据
 transformResponse: [function (data) {
 // 对 data 进行任意转换处理

 return data;
 }],

 // `headers` 是即将被发送的自定义请求头
 headers: {'X-Requested-With': 'XMLHttpRequest'},

 // `params` 是即将与请求一起发送的 URL 参数
 // 必须是一个无格式对象(plain object)或 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
 // - 浏览器专属:FormData, File, Blob
 // - Node 专属: Stream
 data: {
 firstName: 'Fred'
 },

 // `timeout` 指定请求超时的毫秒数(0 表示无超时时间)
 // 如果请求话费了超过 `timeout` 的时间,请求将被中断
 timeout: 1000,

 // `withCredentials` 表示跨域请求时是否需要使用凭证
 withCredentials: false, // 默认的

 // `adapter` 允许自定义处理请求,以使测试更轻松
 // 返回一个 promise 并应用一个有效的响应 (查阅 [response docs](#response-api)).
 adapter: function (config) {
 /* ... */
 },

 // `auth` 表示应该使用 HTTP 基础验证,并提供凭据
 // 这将设置一个 `Authorization` 头,覆写掉现有的任意使用 `headers` 设置的自定义 `Authorization`头
 auth: {
 username: 'janedoe',
 password: 's00pers3cret'
 },

 // `responseType` 表示服务器响应的数据类型,可以是 'arraybuffer', 'blob', 'document', 'json', 'text', 'stream'
 responseType: 'json', // 默认的

 // `xsrfCookieName` 是用作 xsrf token 的值的cookie的名称
 xsrfCookieName: 'XSRF-TOKEN', // default

 // `xsrfHeaderName` 是承载 xsrf token 的值的 HTTP 头的名称
 xsrfHeaderName: 'X-XSRF-TOKEN', // 默认的

 // `onUploadProgress` 允许为上传处理进度事件
 onUploadProgress: function (progressEvent) {
 // 对原生进度事件的处理
 },

 // `onDownloadProgress` 允许为下载处理进度事件
 onDownloadProgress: function (progressEvent) {
 // 对原生进度事件的处理
 },

 // `maxContentLength` 定义允许的响应内容的最大尺寸
 maxContentLength: 2000,

 // `validateStatus` 定义对于给定的HTTP 响应状态码是 resolve 或 reject promise 。如果 `validateStatus` 返回 `true` (或者设置为 `null` 或 `undefined`),promise 将被 resolve; 否则,promise 将被 rejecte
 validateStatus: function (status) {
 return status >= 200 && status < 300; // 默认的
 },

 // `maxRedirects` 定义在 node.js 中 follow 的最大重定向数目
 // 如果设置为0,将不会 follow 任何重定向
 maxRedirects: 5, // 默认的

 // `httpAgent` 和 `httpsAgent` 分别在 node.js 中用于定义在执行 http 和 https 时使用的自定义代理。允许像这样配置选项:
 // `keepAlive` 默认没有启用
 httpAgent: new http.Agent({ keepAlive: true }),
 httpsAgent: new https.Agent({ keepAlive: true }),

 // 'proxy' 定义代理服务器的主机名称和端口
 // `auth` 表示 HTTP 基础验证应当用于连接代理,并提供凭据
 // 这将会设置一个 `Proxy-Authorization` 头,覆写掉已有的通过使用 `header` 设置的自定义 `Proxy-Authorization` 头。
 proxy: {
 host: '127.0.0.1',
 port: 9000,
 auth: : {
 username: 'mikeymike',
 password: 'rapunz3l'
 }
 },

 // `cancelToken` 指定用于取消请求的 cancel token
 // (查看后面的 Cancellation 这节了解更多)
 cancelToken: new CancelToken(function (cancel) {
 })
}

响应结构

某个请求的响应包含以下信息

{
 // `data` 由服务器提供的响应
 data: {},

 // `status` 来自服务器响应的 HTTP 状态码
 status: 200,

 // `statusText` 来自服务器响应的 HTTP 状态信息
 statusText: 'OK',

 // `headers` 服务器响应的头
 headers: {},

 // `config` 是为请求提供的配置信息
 config: {}
}

使用 then 时,你将接收下面这样的响应:

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);
 });

在使用 catch 时,或传递 rejection callback 作为 then 的第二个参数时,响应可以通过 error 对象可被使用,正如在错误处理这一节所讲。。

配置的默认值/defaults

你可以指定将被用在各个请求的配置默认值

全局的 axios 默认值

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';

自定义实例默认值

// 创建实例时设置配置的默认值
var instance = axios.create({
 baseURL: 'https://api.example.com'
});

// 在实例已创建后修改默认值
instance.defaults.headers.common['Authorization'] = AUTH_TOKEN;

配置的优先顺序配置会以一个优先顺序进行合并。这个顺序是:在 lib/defaults.js 找到的库的默认值,然后是实例的 defaults 属性,最后是请求的 config 参数。后者将优先于前者。这里是一个例子:

// 使用由库提供的配置的默认值来创建实例
// 此时超时配置的默认值是 `0`
var instance = axios.create();

// 覆写库的超时默认值
// 现在,在超时前,所有请求都会等待 2.5 秒
instance.defaults.timeout = 2500;

// 为已知需要花费很长时间的请求覆写超时设置
instance.get('/longRequest', {
 timeout: 5000
});

拦截器

在请求或响应被 then 或 catch 处理前拦截它们。

// 添加请求拦截器
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);
 });

如果你想在稍后移除拦截器,可以这样:

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

可以为自定义 axios 实例添加拦截器

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

错误处理

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 {
  // Something happened in setting up the request that triggered an Error
  console.log('Error', error.message);
 }
 console.log(error.config);
 });

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

axios.get('/user/12345', {
 validateStatus: function (status) {
 return status < 500; // 状态码在大于或等于500时才会 reject
 }
})

取消

使用 cancel token 取消请求

Axios 的 cancel token API 基于cancelable promises proposal,它还处于第一阶段。

可以使用 CancelToken.source 工厂方法创建 cancel token,像这样:

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 {
 // 处理错误
 }
});

// 取消请求(message 参数是可选的)
source.cancel('Operation canceled by the user.');

还可以通过传递一个 executor 函数到 CancelToken 的构造函数来创建 cancel token:

var CancelToken = axios.CancelToken;
var cancel;

axios.get('/user/12345', {
 cancelToken: new CancelToken(function executor(c) {
 // executor 函数接收一个 cancel 函数作为参数
 cancel = c;
 })
});

// 取消请求
cancel();

Note : 可以使用同一个 cancel token 取消多个请求

摘自axios github

总结

以上就是这篇文章的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对三水点靠木的支持。

Javascript 相关文章推荐
javascript 写类方式之一
Jul 05 Javascript
再说AutoComplete自动补全之实现原理
Nov 05 Javascript
JavaScript调用堆栈及setTimeout使用方法深入剖析
Feb 16 Javascript
在线一元二次方程计算器实例(方程计算器在线计算)
Dec 22 Javascript
js获得网页背景色和字体色的方法
Mar 21 Javascript
JS实现很酷的EMAIL地址添加功能实例
Feb 28 Javascript
Bootstrap零基础入门教程(二)
Jul 18 Javascript
angular+bootstrap的双向数据绑定实例
Mar 03 Javascript
Vue.js + Nuxt.js 项目中使用 Vee-validate 表单校验
Apr 22 Javascript
js常见遍历操作小结
Jun 06 Javascript
bootstrap datepicker的基本使用教程
Jul 09 Javascript
javascript实现随机抽奖功能
Dec 30 Javascript
Vue学习笔记进阶篇之函数化组件解析
Jul 21 #Javascript
用javascript获取任意颜色的更亮或更暗颜色值示例代码
Jul 21 #Javascript
基于JavaScript实现数码时钟效果
Mar 30 #Javascript
bootstrap多层模态框滚动条消失的问题
Jul 21 #Javascript
基于JavaScript实现无缝滚动效果
Jul 21 #Javascript
基于JavaScript实现选项卡效果
Jul 21 #Javascript
基于JavaScript实现弹幕特效
Aug 27 #Javascript
You might like
php实现事件监听与触发的方法
2014/11/21 PHP
我整理的PHP 7.0主要新特性
2016/01/07 PHP
Yii配置与使用memcached缓存的方法
2016/07/13 PHP
php使用CURL模拟GET与POST向微信接口提交及获取数据的方法
2016/09/23 PHP
PHP通过CURL实现定时任务的图片抓取功能示例
2016/10/03 PHP
浅谈php和js中json的编码和解码
2016/10/24 PHP
PHP中rename()函数的妙用讲解
2019/02/28 PHP
javascript的事件描述
2006/09/08 Javascript
Javascript 类、命名空间、代码组织代码
2011/07/31 Javascript
javascript判断iphone/android手机横竖屏模式的函数
2011/12/20 Javascript
正则表达式中特殊符号及正则表达式的几种方法总结(replace,test,search)
2013/11/26 Javascript
jQuery设置Cookie及删除Cookie实例分析
2016/04/15 Javascript
JS实时弹出新消息提示框并有提示音响起的实现代码
2016/04/20 Javascript
jquery+ajax实现直接提交表单实例分析
2016/06/17 Javascript
jQuery实现的跨容器无缝拖动效果代码
2016/06/21 Javascript
Javascript中this绑定的3种方法与比较
2016/10/13 Javascript
BootStrap实现带有增删改查功能的表格(DEMO详解)
2016/10/26 Javascript
vue实现点击按钮“查看详情”弹窗展示详情列表操作
2020/09/09 Javascript
一篇文章让你搞懂JavaScript 原型和原型链
2020/11/23 Javascript
Windows下Anaconda2安装NLTK教程
2018/09/19 Python
python中break、continue 、exit() 、pass终止循环的区别详解
2019/07/08 Python
Python with用法:自动关闭文件进程
2019/07/10 Python
浅谈tensorflow中Dataset图片的批量读取及维度的操作详解
2020/01/20 Python
利用python对excel中一列的时间数据更改格式操作
2020/07/14 Python
Python Selenium操作Cookie的实例方法
2021/02/28 Python
HTML5之SVG 2D入门4—笔画与填充
2013/01/30 HTML / CSS
HTML5调用手机发短信和打电话功能
2020/04/29 HTML / CSS
英国马莎百货官网:Marks & Spencer
2016/07/29 全球购物
Farah官方网站:男士服装及配件
2019/11/01 全球购物
教育科研先进个人材料
2014/01/26 职场文书
环保倡议书500字
2014/05/15 职场文书
校园标语大全
2014/06/19 职场文书
任命书怎么写
2015/03/02 职场文书
python 爬取京东指定商品评论并进行情感分析
2021/05/27 Python
Vue监视数据的原理详解
2022/02/24 Vue.js
Python之matplotlib绘制折线图
2022/04/13 Python