概述:

1.axios:一个基于Promise用于浏览器和nodejs的HTTP客户端。本质是对ajax的封装。

特征:

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

2.安装

  • npm install axios
  • import axios from "axios"

3.API

1 axios(config)

    eg: axios({
method:"post",
url:"/user",
data:{
firstName:"nanhua",
lastName:"qiushui"
}
});

2.axios(url,config) //默认为get请求

3.请求方法别名

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

4.并发

        自定义配置创建axios实例
var instance = axios.create({
baseURL:"https://some-domain.com/api/",
timeout:1000,
headers:{"X-Custom-Header":"foobar"}
})
自定义实例默认值
//创建实例时设置
//实例创建后修改默认值(设置全局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"; 并发:axios.all(iterable)
eg: axios.all([
axios.get("https://api.github.com/xxx/1");
axios.get("https://api.github.com/xxx/2");
]).then(axios.spread(function(userResp,reposResp){
console.log("User",userResp.data);
console.log("Repositories",reposResp.data);
}))
    * 当所有的请求都完成后,会收到一个数组,它包含着响应对象,其中的顺序和请求发送的顺序相同,可以用axios.spread分割成多个单独的响应对象。

5.config参数

        baseURL: 'https://some-domain.com/api/',  //将自动加在url前面,除非url是一个绝对URL

        //允许在向服务器发送前,修改请求数据
//只能用在PUT\POST\PATCH
//后面数组的函数必须返回一个字符串/ArrayBuffer或Stream
transformRequest:[function(data){
//对data进行任意转换处理
return data;
}], //在传递给then/catch之前,允许修改响应数据
transformResponse: [function (data) {
return data;
}], //即将被发送的自定义请求头
headers:{
'X-Requested-With': 'XMLHttpRequest'
}, //即将与请求一起发送的URL参数
params:{
ID: 12345
}, //负责params序列化的函数
paramsSerializer:function(params){
return Qs.stringify(params,{arrayFormat: "brackets"});
}, //超时
timeout: 1000, //表示跨域请求时是否需要使用凭证
withCredentials: false, //允许响应内容的最大尺寸
maxContentLength: 2000, //对打重定向数目
maxRedirects:5, //是否启用长连接
httpAgent: new http.Agent({
keepAlive: true
}),
httpsAgent: new https.Agent({
keepAlive: true
}), //代理服务器设置
proxy:{
host:"127.0.0.1",
port: 9000,
auth:{
username:"nanhuaqiushui",
password:"Huawei@123"
}
}

6.响应结构

    {
data:{},
status:200,
statusText:"OK",
headers:{}, //服务器响应的头
config:{} //为请求提供的配置信息
}

7.拦截器

    //请求拦截器
axios.interceptors.request.use(function(config){
//发送请求之前做些什么
return config;
},function(error){
//请求错误之后做些什么
return Promise.reject(error);
})
//响应添加拦截器
axios.interceptors.response.use(function(config){
//发送请求之前做些什么
return config;
},function(error){
//请求错误之后做些什么
return Promise.reject(error);
}) //移除拦截器
var myInterceptor = axios.interceptors.request.use(function(){
...
})
axios.interceptors.request.eject(myInterceptor);

新兴实践

const service = axios.create({
baseURL: process.env.BASE_API,
timeout: 100000
}) // 请求拦截器
service.interceptors.request.use(
config => {
config.headers['Content-Type'] = 'application/json'
if (store.getters.token) {
// 让每个请求携带token
config.headers['Authorization'] = store.getters.token
}
return config
},
error => {
Toast.failed('网络异常,请检查网络连接')
console.log(error) // for debug
return Promise.reject(error)
}
) // 响应拦截器
service.interceptors.response.use(
response => {
const res = response.data
if (res.code && res.code !== 200) {
Toast.failed(res.message)
}
return response
},
error => {
Toast.failed('网络异常,请检查网络连接')
return Promise.reject(error)
}
)
export default service

axios基础用法的更多相关文章

  1. PropertyGrid控件由浅入深(二):基础用法

    目录 PropertyGrid控件由浅入深(一):文章大纲 PropertyGrid控件由浅入深(二):基础用法 控件的外观构成 控件的外观构成如下图所示: PropertyGrid控件包含以下几个要 ...

  2. logstash安装与基础用法

    若是搭建elk,建议先安装好elasticsearch 来自官网,版本为2.3 wget -c https://download.elastic.co/logstash/logstash/packag ...

  3. elasticsearch安装与基础用法

    来自官网,版本为2.3 注意elasticsearch依赖jdk,2.3依赖jdk7 下载rpm包并安装 wget -c https://download.elastic.co/elasticsear ...

  4. BigDecimal最基础用法

    BigDecimal最基础用法 用字符串生成的BigDecimal是不会丢精度的. 简单除法. public class DemoBigDecimal { public static void mai ...

  5. Vue组件基础用法

    前面的话 组件(Component)是Vue.js最强大的功能之一.组件可以扩展HTML元素,封装可重用的代码.根据项目需求,抽象出一些组件,每个组件里包含了展现.功能和样式.每个页面,根据自己所需, ...

  6. Smarty基础用法

    一.Smarty基础用法: 1.基础用法如下 include './smarty/Smarty.class.php';//引入smarty类 $smarty = new Smarty();//实例化s ...

  7. 前端自动化测试神器-Katalon的基础用法

    前言 最近由于在工作中需要通过Web端的功能进行一次大批量的操作,数据量大概在5000左右,如果手动处理, 完成一条数据的操作用时在20秒左右的话,大概需要4-5个人/天的工作量(假设一天8小时的工作 ...

  8. Bootstrap fileinput:文件上传插件的基础用法

    官网地址:http://plugins.krajee.com/ 官网提供的样例:http://plugins.krajee.com/file-input/demo 基础用法一 导入核心CSS及JS文件 ...

  9. asyncio 基础用法

    asyncio 基础用法 python也是在python 3.4中引入了协程的概念.也通过这次整理更加深刻理解这个模块的使用 asyncio 是干什么的? asyncio是Python 3.4版本引入 ...

随机推荐

  1. Git读档

    $ git config --global user.name "meng kai" $ git config --global user.email 363255751@qq.c ...

  2. 运行jsp时,报错404

    The origin server did not find a current reprsentation for the target resource or is not willing to ...

  3. scss-@import

    css有一个特别不常用的特性,即@import规则,它允许在一个css文件中导入其他css文件.然而,后果是只有执行到@import时,浏览器才会去下载其他css文件,这导致页面加载起来 特别慢. s ...

  4. height百分比以及高度自适应问题

    1.  你曾经是否说想要 高度占页面或者占div百分比无效的问题,相信你也搜索过了,就是说 需要 设置父亲父亲一直到祖宗html都要设置百分比,才有效果. 总之一句话:想用百分比设置他的高度,则它的父 ...

  5. 解决Android报错No resource found that matches the given name (at 'text' with value '@string/hello').

    解决Android项目No resource found that matches the given name (at 'text' with value '@string/hello'). 如图, ...

  6. qt中的lineEdit文本输入框的输入类型限制(三种验证类)

    qt的三种验证类: 1.输入int类型 QValidator *validator=new QIntValidator(100,999,this): QLineEdit *edit=new QLine ...

  7. python 函数,内置函数

    1.函数 1.1 定义函数 ·函数代码块以 def 关键词开头,后接函数标识符名称和圆括号 (). ·任何传入参数和自变量必须放在圆括号中间,圆括号之间可以用于定义参数. ·函数的第一行语句可以选择性 ...

  8. 【转】JavaScript 中值得注意的 for 循环

    在ECMAScript5(简称 ES5)中,有三种 for 循环,分别是: 简单for循环 for-in forEach 在2015年6月份发布的ECMAScript6(简称 ES6)中,新增了一种循 ...

  9. haproxy学习——简介、基本配置(二)

    官网:http://www.haproxy.org/ 个人感觉haproxy学习的重点在于配置上,把配置文档搞懂了就明白大部分套路了.不过本篇内容属于入门学习:1.使用haproxy简单的实现负载均衡 ...

  10. AMOLED原理介紹

    1. OLED发光原理 OLED(Organic Light Emitting Display,有机发光显示器)是指有机半导体材料在电场驱动下,通过载流子注入和复合导致发光的现象.其基本原理是用ITO ...