axios

article/2025/9/20 20:21:58

axios 中文文档 翻译

  • axios
  • javascript
  • 2 推荐

    axios

    版本:v0.16.1

    基于http客户端的promise,面向浏览器和nodejs

    特色

    • 浏览器端发起XMLHttpRequests请求

    • node端发起http请求

    • 支持Promise API

    • 拦截请求和返回

    • 转化请求和返回(数据)

    • 取消请求

    • 自动转化json数据

    • 客户端支持抵御XSRF(跨站请求伪造)

    安装

    使用npm:

    $ npm i axios

    使用 bower

    $ bower instal axios

    使用cdn

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

    示例

    发起一个GET请求

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

    发起一个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 API


    可以对axios进行一些设置来生成请求。

    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中指定。

    并发 Concurrency

    有用的方法

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

    创建一个实例

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

    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#post(url[,data[,config]])
    axios#put(url[,data[,config]])
    axios#patch(url[,data[,config]])

    Requese Config请求设置

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

    {//`url`是服务器链接,用来请求url:'/user',//`method`是发起请求时的请求方法method:`get`,//`baseURL`如果`url`不是绝对地址,那么将会加在其前面。//当axios使用相对地址时这个设置非常方便//在其实例中的方法baseURL:'http://some-domain.com/api/',//`transformRequest`允许请求的数据在传到服务器之前进行转化。//这个只适用于`PUT`,`GET`,`PATCH`方法。//数组中的最后一个函数必须返回一个字符串或者一个`ArrayBuffer`,或者`Stream`,`Buffer`实例,`ArrayBuffer`,`FormData`transformRequest:[function(data){//依自己的需求对请求数据进行处理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',//`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将会接受;其他的promise将会拒绝。validateStatus: function(status){return status >= 200 && stauts < 300;//默认},//`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:{}
    }
    

    使用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.rquest.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{//一些错误是在设置请求时触发的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 cancel;axios.get('/user/12345', {cancelToken: new CancelToken(function executor(c){//这个executor 函数接受一个cancel function作为参数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}));

    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')
    • 2月24日发布

    你可能感兴趣的文章

    16 条评论
    charexcalibur · 2月26日

    感谢,正好需要。

    回复

    难免有误,谢谢指正。

    farmerz 作者 · 2月27日
    添加回复
    farmerz 作者 · 2月27日
    添加回复
    EasonYou · 2月28日

    默认的content-type是'application/x-www-form-urlencoded',可是我每次去post请求的时候都是 'Content-Type:text/html; charset=UTF-8 '这个咋整...

    回复

    这里的意思是你自己去用这种方法去设置,而不是默认设置就是那个样子。(原文就是那样说的)

    farmerz 作者 · 3月1日
    添加回复
    xrox · 2月28日

    翻译不错,“安装”那个地方,“使用 npm” 里的 axios 拼成了 axiso。:)

    回复

    已修改

    farmerz 作者 · 4月13日
    添加回复
    命理难说 · 4月14日

    赞一个。。楼主跨域的请求怎么弄 好像没看到。。= =

    回复

    参考这个:https://segmentfault.com/q/1010000007665348

    farmerz 作者 · 4月15日
    添加回复
    vince · 4月22日

    请问:为什么axios把data变成了form data?

    回复

    哪里?

    farmerz 作者 · 5月9日
    添加回复
    Hank · 5月17日

    翻译的很不错!!!刚好有需要,,注:Cancellation的 "CancelToke" 定义少了一个字母 “n”。

    回复

    已修正

    farmerz 作者 · 5月19日
    添加回复
    广告
    farmerz farmerz

    132 声望

    发布于专栏

    前端这两年(2016~)

    近几年来前端的变化记录

    3 人关注

    相关收藏夹 换一组

    分享扩散:
    • 新浪微博
    • 微信
    • Twitter
    • Facebook


http://chatgpt.dhexx.cn/article/1QuMKI67.shtml

相关文章

Axios介绍

Axios是专注于网络数据请求的库&#xff0c;相比于XMLHttpRequest对象。axios简单易用&#xff0c;相比于jQuery&#xff0c;axios更加轻量化&#xff0c;只专注于网络数据请求 引入外部js文件 <script src"https://unpkg.com/axios/dist/axios.min.js"><…

VUE的axios的详细介绍和用法

Vue中发送网络请求有非常多的方式, 那么, 在开发中, 我们该如何选择呢? 选择一: 传统的Ajax是基于XMLHttpRequest(XHR) 为什么不用它呢? 非常好解释, 配置和调用方式等非常混乱.编码起来看起来就非常蛋疼. 所以真实开发中很少直接使用, 而是使用jQuery-Ajax 选择二: 在前…

AJAX,Axio异步框架(对原生AJAX封装)。web分区

1.Ajax的理解 以前服务器里的数据&#xff0c;都是存在Servlet域里&#xff0c;然后发给JSP&#xff0c;来进行显示。 有了AJAX&#xff0c;可以和服务器通信。不需要JSP作页面。 可以在Servlet把数据发给浏览器&#xff0c;然后在HTML页面显示。 1.1 以前的方法 1.2 现在的方…

类方法和对象方法的区别

类方法和对象方法 1.类方法属于本类的方法&#xff0c;不会因创建对象的不同而改变&#xff0c;类方法随着类的字节码文件加载而加载&#xff1b; 2.对象方法属于当前类创建的某个对象&#xff0c;会随着创建对象的不同而改变。如下图所示代码&#xff1a;

python中什么叫类、什么叫对象_Python中的类和对象是什么

一、面向过程和面向对象 面向过程:根据业务逻辑从上到下写代码。 面向对象:将数据与函数绑定到一起,进行封装,这样能够更快速的开发程序,减少了重复代码的重写过程。 二、类和对象 1、类的概念 面向对象编程的2个非常重要的概念:类和对象是面向对象编程的核心。 在使用对…

类与对象的区别?

对于初学者来说&#xff0c;类与对象之间的关系的非常模糊不清的&#xff0c;在这里跟大家分享一下&#xff0c;让初学者有所帮助。 一、类的概念&#xff1a; 类是具有相同属性和服务的一组对象的集合。它为属于该类的所有对象提供了统一的抽象描述&#xff0c;其内部包括属性…

Java类和对象 详解(一)

一、面向对象简述 面向对象是一种现在最为流行的程序设计方法&#xff0c;几乎现在的所有应用都以面向对象为主了&#xff0c;最早的面向对象的概念实际上是由IBM提出的&#xff0c;在70年代的Smaltalk语言之中进行了应用&#xff0c;后来根据面向对象的设计思路&#xff0c;才…

C++类和对象详细总结

目录 目录 类与对象概念 什么是对象 什么是类 什么是方法&#xff1a; 自定义类型&#xff08;类的关键字&#xff1a;class&#xff09; 定义类的格式 封装 类的特性 访问权限以及访问限定符 struct 定义的类和class定义的类的区别&#xff1a; 小结 对象中包含了…

C++类和对象详解

类与对象上篇&#xff1a; 主要内容&#xff1a; 1.类和对象的区别。 2.类的定义。 3.类的访问限定符和封装 4.类的作用域 5.类的实例化&#xff08;用类类型创建对象&#xff09; 6.计算类对象的大小 7.this指针 C语言是面向过程的&#xff0c;关注的是过程&#xff0c;分析…

面向过程和面向对象区别

&#xff08;1&#xff09;从设计思路来看。 面向过程&#xff1a;程序设计的重点是分析解决问题的步骤&#xff0c;以及完成步骤的流程&#xff0c;是一种结构化自上而下的程序设计方法。面向对象&#xff1a;程序设计的重点是把构成问题的事物分解成对象&#xff0c;从局部着…

Java基础——类和对象

目录 一、类和对象的基本概念 二、类与对象的定义与使用 1.创建类的语法&#xff1a; 2. 创建具体的对象&#xff1a; 3.范例&#xff08;创建一个Person 类的对象&#xff09; 三、static关键字 &#xff08;一&#xff09;static修饰属性&#xff08;类属性、类变量&a…

类,对象,方法与函数的区别

面向对象&#xff08;Object oriented Programming&#xff0c;OOP)编程 的思想主要是针对大型软件设计而来的。面向对象编程将数据和操作数据相关的方法封装到对象中&#xff0c;组织代码和数据的方式更加接近人的思维&#xff0c;使程序的扩展性更强、可读性更好&#xff0c;…

C++的类和对象

目录 C面向对象的三大特性&#xff1a;封装、继承、多态 封装 构造函数和析构函数 构造函数的分类与调用 深拷贝与浅拷贝 类对象作为类成员 静态成员 成员变量和成员函数是分开存储的 const修饰成员函数 友元 运算符重载 继承 多态 C面向对象的三大特性&#xff1…

java实例和对象对象的区别_java中实例与对象的区别和联系

对象是抽象的说法&#xff0c;你可以把它看作一个符合它自身定义的所有实例的代表&#xff0c;而实例则是对象的现实体现。 你可以说一个实例是一个对象&#xff0c;但你不能说一个对象是一个实例。因为定义对象时只是把自身的规则和逻辑定义好&#xff0c;实例可以通过输入不同…

怎么来理解java类和对象的区别

对象在需求中的使用 在具体问题中如何使用面向对象去分析问题&#xff0c;和如何使用面向对象。 以把大象装冰箱为例进行分析&#xff1a;在针对具体的需求&#xff0c;可以使用名词提炼的办法进行分析&#xff0c;寻找具体的对象。 需求&#xff1a;把大象装冰箱里 对象&…

C++类对象和类指针的区别

好奇这个&#xff0c;所以参考了一些帖子&#xff0c;写下心得。 一篇转载率较高的帖子&#xff1a;C 类对象和 指针的区别 大佬都不贴结果。。。。所以这里我给出代码和结果&#xff1a; #include<iostream> using namespace std;class Test{ public:int a;Test(){a …

Java中类和对象的区别

一、类和对象 1、类 类的理解 类是对现实生活中一类具有共同属性和行为的事物的抽象类是对象的数据类型&#xff0c;类是具有相同属性和行为的一组对象的集合简单理解&#xff1a;类就是对现实事物的一种描述 类的组成 属性&#xff1a;指事物的特征&#xff0c;例如&#xff…

安装svn 汉化包 也不能设置中文

(以下为亲测!) 汉化包地址:https://osdn.net/projects/tortoisesvn/storage 进入地址之后:选择对应版本-->>Language Packs-->>选择中文包 问题: 已经安装svn汉化包,但是不能设置为中文. 解决: 确保汉化包版本对应svn版本.如果汉化包版本已经对应svn版本,则把…

SVN汉化失败的原因及解决方案(通过SVN官网下载SVN和相应的汉化包)

1、没删除SVN根目录语言包里的所有文件 2、汉化包没放在SVN根目录的语言文件夹下安装 3、SVN版本和汉化包版本不一致 首先看自己电脑上安装的svn是什么版本&#xff1a; 比如我的就是 TortoiseSVN 1.11.1&#xff0c;那我就要找TortoiseSVN 1.11.1对应的TortoiseSVN 1.11.1l…

Tortoise SVN 汉化(官网下载汉化包)

&#xff08;本操作是已经下载Tortoise SVN后 &#xff0c;通过官网下载汉化包进行的操作&#xff09; 1、首先进入到官网 https://tortoisesvn.net/downloads.html 2、进入到官网首页&#xff0c;点击Translations 3、进入到翻译页面&#xff0c;点击download 4、进入到下…