axios 中文文档 翻译

0.18.0的版本更新有一段时间了,使用起来跟原先基本没有什么变化。但是增加了一些功能,例如错误处理的辨别,于07-06-2018重新翻译和校验了该翻译,更正了一些错别字和表达不准的地方,但是难免仍有错误,欢迎指出。

由于工作需要,个人也包装了一个简易的跟axios风格一样在小程序中使用的请求函数。方便一些使用类似vue写法框架来开发小程序的人更方便的无缝桥接。
有需要的读者可以观看一下。 传送门

关于Promise的一练习和训练,此处有一个比较好的集合。传送门

正文

基于Promise的http库,适用于浏览器和node.js。

原文

点击查看原文

特色

  • 浏览器端发起XMLHttpRequests请求
  • node端发起http请求
  • 支持Promise API
  • 拦截请求和返回
  • 转化请求和返回(数据)
  • 取消请求
  • 自动转化json数据
  • 客户端支持抵御XSRF(跨站请求伪造)

浏览器支持

Chrome

Firefox

Safari

Opera

Edge

IE

Latest ✔Latest ✔Latest ✔Latest ✔Latest ✔8+ ✔

安装

使用npm:

$ npm i axios

使用 bower

$ bower instal axios

使用cdn

<!--国内bootCDN-->
<script src="https://cdn.bootcss.com/axios/0.18.0/axios.min.js"></script>

示例

发起一个GET请求

const axios = require('axios')//发起一个user请求,参数为给定的ID
axios.get('/user?ID=12345')
.then(function(respone){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)});

注意:async/await是ECMAScript2017的语法,ie和一些老旧的浏览器不支持,请小心使用。
(译者话:使用ts的话可以很容易的编译和使用,也不需要任何垫片,目标编译成es5即可)

发起一个POST请求

axios.post('/user',{firstName:'friend',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([getUerAccount(),getUserPermissions()]).then(axios.spread(function(acc,pers){//两个请求现在都完成}));

译者话:因为axios.all使用的是类似Primise.all的功能,所以如果其中有一个请求出现了错误那么就会停止请求,所以建议对于单个请求最好附加上处理的catch。

axios API


根据自己需求可以对axios传递一些的设置来生成请求(Request)。

axios(config)

//发起 POST请求axios({method:'post',//方法url:'/user/12345',//地址data:{//参数firstName:'Fred',lastName:'Flintstone'}
});
//通过请求获取远程图片
axios({method:'get',url:'http://bit.ly/2mTM3Ny',responseType:'stream'
}).then(function(response){response.data.pipe(fs.createWriteStream('ada_lovelace.jpg'))})

axios(url[,config])

//发起一个GET请求
axios('/user/12345/);

请求方法的别名。

为了方便,axios提供了所有请求方法的别名支持

axios.request(config)
axios.get(url[,config])
axios.delete(url[,config])
axios.head(url[,config])
axios.options(url[,config])
axios.post(url[,data[,config]])
axios.put(url[,data[,config]])
axios.patch(url[,data[,config]])

注意

当时用别名方法时url,method,以及data属性不必在config中明确指定(如上面示例的post方法请求)。

并发 Concurrency

有用的方法

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

创建一个实例(instance)

你可以使用自定义设置创建一个新的实例

axios.create([config])

var instance = axios.create({baseURL:'http://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#options(url[,config])
axios#post(url[,data[,config]])
axios#put(url[,data[,config]])
axios#patch(url[,data[,config]])

Requeset Config请求设置

以下列出了一些请求时的设置选项。只有url是必须的,如果没有指明method的话,默认的请求方法是GET.

{//`url`是服务器链接,用来请求url:'/user',//`method`是发起请求时的方法method:`get`,//`baseURL`如果`url`不是绝对地址,那么将会加在其前面。//可以很方便的对相对地址的axios实例设置`baseUrl`。baseURL:'http://some-domain.com/api/',//`transformRequest`允许请求的数据在发送至服务器之前进行转化。//这个只适用于`PUT`,`POST`,`PATCH`方法。//数组中的最后一个函数必须返回一个字符串或者一个`ArrayBuffer`,或者`Stream`,`Buffer`实例,`ArrayBuffer`,`FormData`//此外你也可能需要设置下headers对象transformRequest:[function(data,headers){//依自己的需求对请求数据进行处理return data;}],//`transformResponse`允许对返回的数据传入then/catch之前进行处理transformResponse:[function(data){//依需要对数据进行处理return data;}],//`headers`是自定义的要被发送的信息头headers:{'X-Requested-with':'XMLHttpRequest'},//`params`是请求连接中的请求参数,必须是一个纯对象,或者URLSearchParams对象params:{ID:12345},//`paramsSerializer`是一个可选的函数,用来控制和序列化参数//例如:(https://ww.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:Streamdata:{firstName:'fred'},//`timeout`定义请求的时间,单位是毫秒。//如果请求的时间超过这个设定时间,请求将会停止。timeout:1000,//`withCredentials`表明跨跨域请求书否需要证明。withCredentials:false //默认值//`adapter`适配器,允许自定义处理请求,这会使测试更简单。//返回一个promise,并且提供一个有效的相应。(查看[response docs](#response-api))adapter:function(config){/*...*/},//`auth`表明HTTP基础的认证应该被使用,并且提供证书。//这个会设置一个`authorization` 头(header),并且覆盖你在header设置的Authorization头信息。auth:{username:'janedoe',password:'s00pers3cret'},//`responsetype`表明服务器返回的数据类型,这些类型的设置应该是//'arraybuffer','blob','document','json','text',stream'responsetype:'json',//`responseEncoding`表明解析相应的编码方式。//**注意**会忽视responseType为stream或者客户端的请求。responseEncoding:'utf8'//默认值//`xsrfCookieName`时cookie做xsrf会话时的名字。xsrfCookieName:'XSRF-TOKEN',//默认值//`xsrfHeaderName` 是http头(header)的名字,并且该头携带xsrf的值xrsfHeadername:'X-XSRF-TOKEN',//默认值//`onUploadProgress`允许处理上传过程的进程事件onUploadProgress: function(progressEvent){//本地过程事件发生时想做的事},//`onDownloadProgress`允许处理下载过程的进程事件onDownloadProgress: function(progressEvent){//下载过程中想做的事},//`maxContentLength` 定义http返回内容的最大字节容量maxContentLength: 2000,//`validateStatus` 定义promise的resolve和reject。//http返回状态码,如果`validateStatus`返回true(或者设置成null/undefined),promise将会resolve;其他的promise将reject。validateStatus: function(status){return status >= 200 && stauts < 300;//默认},//`maxRedirect`定义重导向到node.js中的最大数量。//如果值为0,那么没有redirect。maxREdirects:5,//默认值//`socketPath`定义一个在node.js中使用的 `UNIX Socket`。//例如 `/var/run/docker.sock`发送请求到docker daemon。//`socketPath`和`proxy`只可定义其一。//如果都定义则只会使用`socketPath`。socketPath:null,//默认值//`httpAgent` 和 `httpsAgent`当产生一个http或者https请求时分别定义一个自定义的代理,在nodejs中。//这个允许设置一些选选个,像是`keepAlive`--这个在默认中是没有开启的。httpAgent: new http.Agent({keepAlive:treu}),httpsAgent: new https.Agent({keepAlive:true}),//`proxy`定义服务器的主机名字和端口号。//`auth`表明HTTP基本认证应该跟`proxy`相连接,并且提供证书。//这个将设置一个'Proxy-Authorization'头(header),覆盖原先自定义的。proxy:{host:127.0.0.1,port:9000,auth:{username:'cdd',password:'123456'}},//`cancelTaken` 定义一个取消,能够用来取消请求//(查看 下面的Cancellation 的详细部分)cancelToken: new CancelToken(function(cancel){})
}

返回响应概要 Response Schema

一个请求的返回包含以下信息

{//`data`是服务器的提供的回复(相对于请求)data{},//`status`是服务器返回的http状态码status:200,//`statusText`是服务器返回的http状态信息statusText: 'ok',//`headers`是服务器返回中携带的headersheaders:{},//`config`是对axios进行的设置,目的是为了请求(request)config:{}//`request`是获取当前相应的请求//它是node.js中最后一次的 ClientRequest的实例(在redirect中)//或者是在浏览器中的XMLHttpREquest实例
}

使用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时,或者传入一个reject callback作为then的第二个参数,那么返回的错误信息将能够被处理。


默认设置(Config Default)

你可以设置一个默认的设置,这设置将在之后的每次请求中生效。

全局默认设置 Global axios defaults
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';
实例中自定义默认值 Custom instance default
//当创建一个实例时进行默认设置
var instance = axios.create({baseURL:'https://api.example.com'
});//或者在实例创建之后改变默认值
instance.defaults.headers.common['Authorization'] = AUTH_TOKEN;
设置优先级 Config order of precedence

设置(config)将按照优先顺序合并起来。首先的是在lib/defaults.js中定义的默认设置,其次是defaults实例属性的设置,最后是请求中config参数的设置。越往后面的等级越高,会覆盖前面的设置。
看下面这个例子:

//使用默认库的设置创建一个实例,
//这个实例中,使用的是默认库的timeout设置,默认值是0。
var instance = axios.create();//覆盖默认库中timeout的默认值
//此时,所有的请求的timeout时间是2.5秒
instance.defaults.timeout = 2500;//覆盖该次请求中timeout的值,这个值设置的时间更长一些
instance.get('/longRequest',{timeout:5000
});

拦截器 interceptors

你可以在请求或者返回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(){/*...*/});

错误处理 Handling Errors

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 if(error.request){//如果是请求时的错误,且没有收到相应//`error.request`是一个浏览器的XMLHttpRequest实例,或者node.js的 ClientRequest实例。console.log(error.request)} else{//一些错误是在设置请求时触发的console.log('Error',error.message);}console.log(error.config);});

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

axios.get('user/12345',{validateStatus:function(status){return status < 500;//当返回码小于等于500时视为错误}
});

取消 Cancellation

你可以使用cancel token取消一个请求

axios的cancel token API是基于已经撤销的**cnacelable promises proposal**提议。

你可以使用CancelToken.source工厂函数创建一个cancel token,如下:

var CancelToken = axios.CancelToken;
var source = CancelToken.source();axios.get('/user/12345', {cancelToken:source.toke
}).catch(function(thrown){if(axiso.isCancel(thrown)){console.log('Rquest canceled', thrown.message);}else{//handle error}
});//取消请求(信息参数设可设置的)
source.cancel("操作被用户取消");

你可以给CancelToken构造函数传递一个executor function来创建一个cancel token:

var CancelToken = axios.CancelToken;
var source = CancelToken.source()axios.get('/user/12345',{cancelToke:source.token
}).catch(function(thrown){if(axios.isCancel(throw)){console.log('请求已取消',throw.message)}else{//处理错误}
})axios.post('/user/2345',{name:'new name'
},{cancelToken:source.toke
})source.cancel('错做已被用户取消!')

你也可以给CancelToke的构造函数传递一个处理函数来生成一个cancel token。

const CancelToken = axios.CancelToken
let cancel;acios.get('/user/12345',{cancelToken:new CancelToken(function excutor(c){//一个处理函数接受一个cancel函数作为参数cancel = c})
})// 取消请求
cancel()
注意:你可以使用同一个cancel token取消多个请求。

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

本人做的简单包装

默认情况下,axios串联js对象为JSON格式。为了发送application/x-wwww-form-urlencoded格式数据,
你可以使用一下的设置。

浏览器 Browser

在浏览器中你可以如下使用URLSearchParams API:

var params = new URLSearchParams();
params.append('param1','value1');
params.append('param2','value2');
axios.post('/foo',params);

注意:URLSearchParams不支持所有的浏览器,但是这里有个垫片
(poly fill)可用(确保垫片在浏览器全局环境中)

其他方法:你可以使用qs库来对数据编码。

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

或者其他方法(es6)

import qs from 'qs';
const data = {'bar':123};
const options = {method:'POST',headers:{'content-type':'application/x-www-from-urlencoded'},data:qs.stringify(data),url
}
axios(options)

兼容Semver

当axios放出1.0版本时,一些不兼容的更改将会放在新的版本中。例如0.5.10.5.4有相同的api,但是0.6.0会有不兼容的变化。

译者:小知识
在npm的版本习惯中,版本使用的习惯是a.b.c,其中c的变化是一些bug的修复,b是一些功能的添加,a是大的版本的变化,会出现不兼容的情况。

Node.js

在nodejs中,你可以如下使用querystring:

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

你同样可以使用qs库。


promises

axios 基于原生的ES6 Promise 实现。如果环境不支持请使用垫片.

TypeScript

axios 包含TypeScript定义

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

 

仅供参考!!! 

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

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

相关文章

GitLab服务器的搭建

GitLab服务器的搭建 为公司搭建一台代码托管服务器 服务器规格&#xff1a;2vCPUs4GiB20G 操作系统&#xff1a;RockyLinux8.8 下载软件 gitlab官网&#xff1a;http://about.gitlab.com 在官网下载比较麻烦&#xff0c;推荐从《清华大学开源软件镜像站》下载 清华大学开…

38-3 Web应用防火墙 - 安装配置WAF

首先需要安装Centos 7 虚拟机:Centos7超详细安装教程_centos7安装教程-CSDN博客 安装配置WAF 在桌面环境中,右键点击打开终端,首先执行以下步骤: 1)安装必要的工具: 输入命令: sudo su yum install -y wget epel-release 2)第二步,安装依赖工具,输入以下命令: y…

深入理解网络原理1

文章目录 前言一、网络初识1.1 IP地址1.2 端口号1.3 协议1.4 五元组1.5 协议分层 二、TCP/IP五层协议三、封装和分用四、客户端vs服务端4.1 交互模式4.2 常见的客户端服务端模型4.3 TCP和UDP差别 前言 随着时代的发展&#xff0c;越来越需要计算机之间互相通信&#xff0c;共享…

大模型咨询培训叶梓老师:数千大模型,1张GPU搞定——UC Berkeley提出全新微调方法S-LoRA

在大语言模型&#xff08;LLM&#xff09;的部署中&#xff0c;通常采用“预训练-微调”范式。为了适应多样化的任务&#xff0c;参数高效的微调方法如低秩适应&#xff08;LoRA&#xff09;被广泛使用。然而&#xff0c;如何高效地服务这些微调变体仍然是一个未探索的问题。S-…

VBA技术资料MF147:从Excel运行PowerPoint演示文稿

我给VBA的定义&#xff1a;VBA是个人小型自动化处理的有效工具。利用好了&#xff0c;可以大大提高自己的工作效率&#xff0c;而且可以提高数据的准确度。“VBA语言専攻”提供的教程一共九套&#xff0c;分为初级、中级、高级三大部分&#xff0c;教程是对VBA的系统讲解&#…

redis ZRANGE 使用最详细文档

环境&#xff1a; redis_version:7.2.2 本文参考 redis 官方文档1 语法 ZRANGE key start stop [BYSCORE | BYLEX] [REV] [LIMIT offset count] [WITHSCORES]参数含义key是有序集合的键名start stop在不同语境下&#xff0c;可用值不一样BYSCORE | BYLEX按照分数查询 | 相…

【SQL每日一练】统计复旦用户8月练题情况

文章目录 题目一、分析二、题解1.使用case...when..then2.使用if 题目 现在运营想要了解复旦大学的每个用户在8月份练习的总题目数和回答正确的题目数情况&#xff0c;请取出相应明细数据&#xff0c;对于在8月份没有练习过的用户&#xff0c;答题数结果返回0. 示例代码&am…

Excel 批量获取sheet页名称,并创建超链接指向对应sheet页

参考资料 用GET.WORKBOOK函数实现excel批量生成带超链接目录且自动更新 目录 一. 需求二. 名称管理器 → 自定义获取sheet页名称函数三. 配合Index函数&#xff0c;获取所有的sheet页名称四. 添加超链接&#xff0c;指向对应的sheet页 一. 需求 ⏹有如下Excel表&#xff0c;需…

Easy TCP Analysis上线案例库功能,为用户提供一个TCP抓包分析案例分享学习的平台

​案例库&#xff0c;提供给用户相互分享TCP抓包故障排查案例或是经典学习案例的功能&#xff0c;任何用户都可从案例库查看其它用户分享的案例&#xff0c;每个用户也都可以上传自己的案例&#xff0c;经过平台审核去重即可展示在案例库。 对于学习&#xff0c;最典型的三次握…

【Docker学习】docker start深入研究

docker start也是很简单的命令。但因为有了几个选项&#xff0c;又变得复杂&#xff0c;而且... 命令&#xff1a; docker container start 描述&#xff1a; 启动一个或多个已停止的容器。 用法&#xff1a; docker container start [OPTIONS] CONTAINER [CONTAINER...] 别名&…

【网络编程】网络基础

TCP/IP五层模型 物理层&#xff1a;负责光/电信号的传递方式. 比如现在以太网通用的网线&#xff08;双绞线&#xff09;、早期以太网采用的的同轴电缆&#xff08;现在主要用于有线电视&#xff09;、光纤&#xff0c;现在的 WIFI无线网使用电磁波等都属于物理层的概念。物理层…

使用 uni-app 开发 iOS 应用的操作步骤

哈喽呀&#xff0c;大家好呀&#xff0c;淼淼又来和大家见面啦&#xff0c;上一期和大家一起探讨了使用uniapp开发iOS应用的优势及劣势之后有许多小伙伴想要尝试使用uniapp开发iOS应用&#xff0c;但是却不懂如何使用uniapp开发iOS应用&#xff0c;所以这一期淼淼就来给你们分享…

数据结构复习指导之数组和特殊矩阵

文章目录 数组和特殊矩阵 考纲内容 复习提示 前言 1.数组的定义 2.数组的存储结构 3.特殊矩阵的压缩存储 3.1对称矩阵 3.2三角矩阵 3.3三对角矩阵 4.稀疏矩阵 5.知识回顾 数组和特殊矩阵 考纲内容 &#xff08;一&#xff09;栈和队列的基本概念 &#xff08;二&a…

【C++】:const成员,取地址及const取地址操作符重载

目录 一&#xff0c;const成员二&#xff0c;取地址及const取地址操作符重载 一&#xff0c;const成员 将const修饰的“成员函数”称之为const成员函数&#xff0c;const修饰类成员函数&#xff0c;实际修饰该成员函数隐含的this指针&#xff0c;表明在该成员函数中不能对类的…

百度竞价开户详解:步骤、优势与注意事项

随着互联网的普及&#xff0c;网络营销已成为企业不可或缺的一部分。其中&#xff0c;百度竞价作为一种高效的网络推广方式&#xff0c;受到了越来越多企业的青睐。本文将详细介绍百度竞价开户的流程、优势以及注意事项&#xff0c;帮助企业更好地利用这一工具提升品牌知名度和…

UnityWebGL获取话筒实时数据

看了木子李大佬的数字人https://digital.lkz.fit/之后&#xff0c;我也想搞一个&#xff0c;于是开始研究起来&#xff0c;先从WebGL录音开始&#xff0c;一共试了三个插件&#xff0c;个个都有问题…… 1、UnityWebGLMicrophone 用起来没啥问题&#xff0c;但是只能录音&#…

数据结构的队列(c语言版)

一.队列的概念 1.队列的定义 队列是一种常见的数据结构&#xff0c;它遵循先进先出的原则。类似于现实生活中排队的场景&#xff0c;最先进入队列的元素首先被处理&#xff0c;而最后进入队列的元素则要等到前面的元素都被处理完后才能被处理。 在队列中&#xff0c;元素只能…

《恶意不息》是一款什么样的游戏,苹果电脑怎么玩《恶意不息》恶意不息游戏内怎么存档 mac电脑玩游戏

近日steam游戏商城新上架了一款名叫《恶意不息》的游戏十分火爆&#xff0c;那么《恶意不息》是一款什么样的游戏&#xff0c;苹果电脑怎么玩《恶意不息》&#xff1f;一起来看看吧&#xff01; 一、《恶意不息》是一款什么样的游戏&#xff1f; Private Division&#xff0c;…

【蓝桥杯嵌入式】第七届省赛 - 模拟液位检测告警系统

代码开源&#xff0c;Gitee自取 代码开源&#xff0c;Gitee自取 代码开源&#xff0c;Gitee自取 目录 0 前言 1 展示 1.1 源码 1.2 演示视频 1.3 题目展示 2 工程配置 3 资源配置&代码实现 3.1 定时器 3.2 液位检测 3.3 液位阈值设定 3.4 液位阈值设定 3.5 串…

BST二叉搜索树

概念 二叉搜索树&#xff08;Binary Search Tree&#xff0c;简称BST&#xff09;&#xff0c;又称为二叉排序树或二叉查找树&#xff0c;是一种特殊的二叉树数据结构。它具有以下基本性质&#xff1a; 节点的值的有序性&#xff1a;对于BST中的任意一个节点&#xff0c;其左…