Vue axios基础

基于 promise 的 HTTP 客户端axios

axios本身具有以下特征:

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

Promise

Promise 是异步编程的一种解决方案,而且还是以一种优雅的方式来处理异步请求的,本质上是一个构造函数,函数本身上巨有all、reject、resolve这几个方法,原型上有then、catch等方法。

对于主要解决的问题,由于笔者至今还未遇到过这样的需求,所以感触并没有太深刻,但是可以简单说明一下:
比如说对于传统的Ajax请求,如果第一次通过url1发送请求的时候需要服务器返回一个数据data1,而我们又需要data1取出url2的地址,来进行第二次网络请求,同理,第三次网络请求又需要第二次网络请求的返回的数据data2取出的url3… 这样一层层下去,不仅仅需要先验判断某一层网络请求失败的情况的代码,而且我们不能很好地将数据处理和数据请求分离,这样的代码就会显得很是冗余,一旦出现bug,对开发人员的debug要求就会变得很高。

其大致用法如下:

// 第一次异步网络请求
new Promise((resolve,reject) => {// 异步通信数据请求代码resolve(val) // 请求成功调用此函数reject(err) // 请求失败调用此函数
}).then(val => {// 处理第一次成功请求// 第二次异步网络请求new Promise((resolve,reject) => {// 异步通信数据请求代码resolve(val) // 请求成功调用此函数reject(err) // 请求失败调用此函数}).then(val => {...}).catch(err => {...})
}).catch(err => {// 处理第一次失败请求
})

axios的基本使用

项目根目录下执行以下命令安装axios:

npm install axios --save

导入并使用axios:

import axios from 'axios'// get方式
axios({url: "http://httpbin.org/get",method: 'get',params:{name: "张三",id: 1001,age: 21}
}).then(res => {console.log(res);
})
// post方式
axios({url: "http://httpbin.org/post",method: 'post',data:{name: "张三",id: 1000,age: 20}
}).then(res => {console.log(res);
})

结果显示:

axios的并发请求

有时候,我们需要满足这样的需求:必须在特定的一些网络请求全部成功后才能统一执行某一事件。而axios已经封装好了这个方法,如下演示:

import axios from 'axios'axios.all([axios({method: "get",url: "http://httpbin.org/get",params:{name:"张三",id: 1001}}).then(res => {console.log("第一个axios请求成功",res);return res;}),axios({method: "post",url: "http://httpbin.org/post",data: {name:"李四",id: 1002}}).then(res => {console.log("第二个axios请求成功",res);return res;}),axios({method: "post",url: "http://httpbin.org/post",data: {name:"王五",id: 1003}}).then(res => {console.log("第三个axios请求成功",res);return res;})
]).then(result => {console.log("这个一定是等待以上全部请求成功后… ",result[0],result[1],result[2]);
})

为了减少相关代码的重复冗余,选择公共默认选项,可以使用axios.defaults方法,如下演示:

axios.defaults.baseURL = "http://httpbin.org";
axios.defaults.timeout = 1000; // 超时限制
axios({url: "/get",method: 'get',params:{name: "张三",id: 1001,age: 21}
}).then(res => {console.log(res);
})axios({url: "/post",method: 'post',data:{name: "张三",id: 1000,age: 20}
}).then(res => {console.log(res);
})

axios实例化

对于一些分布式服务器来说,全局配置axios可能是会冲突的,因此,axios允许创建axios实例。

const request1 = axios.create({baseURL: "http://httpbin.org",timeout: 1000
})
const request2 = axios.create({baseURL:"http://httpbin.org",timeout: 2000,method: "post"
})
request1({url: "/get",params:{name:"张三",age: 20}
}).then(res => {console.log(res);
})
request2({url: "/post",data:{name:"李四",age: 21}
}).then(res => {console.log(res);
})

axios模块化

为了减少网页之间与axios之间的耦合度(解耦合),可以通过一个文件作为全局索引导入。

如,可以在src目录下创建一个network文件夹,目录下再创建request.js:

import axios from  'axios'// 这里config作为配置参数,success作为成功回调函数,failure作为失败回调函数
export function request(config,success,failure){const instance = axios.create({baseURL: "http://httpbin.org",timeout: 2000})// 发送真正的网络请求instance(config).then(res => {success(res)}).catch(err => {failure(err)})
}

使用方式:


import {request} from './network/request'request({url: "get",method: 'get',params: {name: "张三",age: 20}
}, res => {console.log(res);
}, err => {console.log(err);
})request({url: "post",method: 'post',data: {name: "王五",age: 21}
}, res => {console.log(res);
}, err => {console.log(err);
})

上例解释,创建一个axios实例,实现多组件共享,通过传递成功请求回调函数和传递失败回调函数作为一个出口,用户通过传递config参数也能自定义配置。同样,读者也可以实现多个axios默认实例导出供多个组件共享。

以上版本可以进一步升级,通过Promise方式,即进一步封装增强Promise:

request.js:

export function request(config){return new Promise((resolve,reject) => {// 配置默认项const instance = axios.create({baseURL: "http://httpbin.org",timeout: 2000})// 发送网络请求instance(config).then(res => {resolve(res)}).catch(err => {reject(err)})})
}

使用方式:

import {request} from './network/request'request({url: "/get",method: 'get',params:{name: "张三",age: 20}
}).then(res => {console.log(res);
}).catch(err => {console.log(err);
})request({url: "/post",method: 'post',params:{name: "赵六",age: 21}
}).then(res => {console.log(res);
}).catch(err => {console.log(err);
})

再进一步升级简化:

export function request(config){const instance = axios.create({baseURL: "http://httpbin.org",timeout: 2000})// 发送真正的网络请求return instance(config);
}

之所以可以像上面一样可以直接返回axios实例,是因为其本身就是继承了Promise。

拦截器

对于请求成功或失败,相应成功或失败都可以进行相应拦截操作。

一般可用作网络加载页面图标显示,或者登录页面的token验证等…

request.js:

export function request(config){const instance = axios.create({baseURL: "http://httpbin.org",timeout: 2000})instance.interceptors.request.use(config => {console.log("请求拦截配置:",config);return config;},err => {console.log(err);})instance.interceptors.response.use(res => {console.log("响应拦截结果:",res);return res.data.args; // 返回data即可},err => {console.log(err);})// 发送真正的网络请求return instance(config);
}

使用:


import {request} from './network/request'request({url: "/get",method: 'get',params:{name: "张三",age: 20}
}).then(res => {console.log(res);
}).catch(err => {console.log(err);
})

Vue axios基础相关推荐

  1. ❤️《Vue前端基础框架集合从入门到高级》(小白也可学,建议收藏)❤️

    <Vue前端基础框架集合从入门到高级>,小白也可学 文章目录 <Vue前端基础框架集合从入门到高级>,小白也可学 ❤️一.前端核心分析 ❤️1.1.概述 ❤️1.2.前端三要素 ...

  2. Vue的基础入门及使用

    Vue的基础入门及使用 第一章 Vue核心 1.1 Vue的基本认识 1.1.1 官网 英文官网:https://vuejs.org/ 中文官网:https://cn.vuejs.org/ 1.1.2 ...

  3. 视频教程-Vue零基础到精通视频教程-Vue

    Vue零基础到精通视频教程 从事多年web前端开发和教育培训(线上)工作,主要从事web前端工作.php后端工作,在pc端和移动端开发都具有丰富经验,同事有响应式布局.vue框架开发.微信小程序开发经 ...

  4. 2018年最新Vue从基础入门到项目实战视频教程网盘学习地址

    2018年最新Vue从基础入门到项目实战视频教程网盘学习地址: https://pan.baidu.com/s/15D6GiHnSgA5Eo0n9G5Ws1A 若网盘地址失效,可访问此地址(下单有网盘 ...

  5. Vue.js基础知识

    一.Vue.js是什么? 它是一套用于构建用户界面的渐进式框架.其设计为自底向上逐层应用.Vue只关心视图层. 二.声明式的渲染 1. Vue.js的核心是采用简洁的模板语法来声明式地将数据渲染到DO ...

  6. # vue.js 之 对vue.js基础理解

    vue.js 之 对vue.js基础理解 Vue构造器 1 . Vue.js是一个构造函数,编程中称之为构造器 2 . 每一个new Vue() 都是一个Vue构造函数的实例,这个过程叫做实例化 3 ...

  7. Vue+axios(interceptors) 实现http拦截 + router路由拦截 (双拦截)+ 请求自带loading效果...

    axios interceptors 拦截器 //interceptors.js// vue axios配置 发起请求加载loading请求结束关闭loading // http request 请求 ...

  8. vue上传文件到php,vue+axios+php如何实现上传文件功能?,formdata上传文件附加参数...

    vue+axios+php如何实现上传文件功能?Vue Axios PHP如何实现上传文件的功能?, 推荐:<PHP视频教程> 当我们提交表单时,我们经常会遇到一些表单提交要求.vue的a ...

  9. [vue] axios是什么?怎样使用它?怎么解决跨域的问题?

    [vue] axios是什么?怎样使用它?怎么解决跨域的问题? axios 的是一种异步请求,用法和ajax类似,安装npm install axios --save 即可使用,请求中包括get,po ...

最新文章

  1. 从实现iPhone的OAuth封装看国内互联网和开放平台
  2. 从开发到上线,一个人的两周产品研发之旅
  3. 得力助手 消防员的 消防机器人_消防机器人:消防员的“得力助手”
  4. SpringBoot三种获取Request和Response的方法
  5. Standard Deviation Normal Distribution
  6. 解决: libcimtd.lib not found, rpcndr.lib not found
  7. .NET Core开发的iNeuOS物联网平台部署树莓派(raspbian),从网关到云端整体解决方案。助力2019中国.NET峰会。
  8. JAVA调用shell脚本利用ansible修改多节点上的redis参数
  9. 如何在C++中调用python代码
  10. 数据库 超市零售管理系统
  11. spark大数据技术与应用 实训
  12. @Lazy注解简单理解
  13. 网关的作用(两个内网主机通信原理)
  14. 李开复创业两年记:创新工场的孵化之困
  15. 使用CCS导出TXT用于BSL烧录
  16. RT-Thread学习笔记【ADC与DAC设备】
  17. Verilog初级教程(5)Verilog中的多维数组和存储器
  18. 文章阅读——Mysql技术内幕
  19. 细数抖音电商的7问题
  20. android 手机型号占有量,2021年安卓手机性能排行及手机品牌占有率

热门文章

  1. ospf四类,五类和七类LSA详解
  2. 微信公众号测试号接口配置信息
  3. 项目经理须掌握的【项目管理工具和方法】
  4. 【强化学习-14】Multi-agent reinforcement learning: centralized vs. decentralized
  5. Topographic Laser Ranging and Scanning Principles and Processing翻译
  6. 如何更改手机Android版本,安卓手机怎么刷机 教你刷成其他版本系统【详细介绍】...
  7. Go数据结构与算法-双向链表
  8. lol1.7更新服务器维护,LOL7.1版本更新维护补偿
  9. 律师事务所管理系统-JAVA【毕业设计、快速开发、源码、开题报告】
  10. 北海焊接机器人_水下焊接机器人技术发展现状及趋势