axios学习和使用
网络请求的方式
- 传统的Ajax,基于XMLHttpRequest(不推荐) - 配置调用方式混乱(回调地狱)
 
- jQuery-Ajax (在vue开发中不推荐) - 相对于传统的Ajax非常好用
- 但是jQuery的代码1w行,vue的代码1w行,在vue开发中,完全没有为了用网络请求就引用一个重量级的框架
 
- axios(推荐) - 在Vue-resource停止更新之后,axios是vue作者推荐的一款轻便的基于 promise 的 HTTP 库
 
认识Axios
- 可以理解为 ajax i/o system 的缩写
- 功能特点:
- 在浏览器中发送 XMLHttpRequests 请求
- 在 node.js 中发送 http请求
- 支持 Promise API
- 拦截请求和响应
- 转换请求和响应数据
- 。。。
 
- 支持多种请求方式:
- axios(config)
- axios.request(config)
- axios.get(url[, config])
- axios.delete(url[, config])
- axios.head(url[, config])
- axios.put(url[, data[, config]])
- axios.patch(url[, data[, config]])
 
发送基本请求
- **发送get请求演示**
 import axios from 'axios'
 export default {
 name:'app',
 created(){ //在vue的生命周期函数中
 //提问:为什么没有跨域的问题?
 //1.没有请求参数
 axios.get('http://123.207.32.32:8000/api/v1')
 .then(res=>{
 console.log(res);
 }).catch(err=>{
 console.log(err)
 }) //2.有参数
 axios.get('http://123.207.32.32:8000/api/v1',
 {params:{type:'sell',page:1}})
 .then(res=>{
 console.log(res)
 }).catch(err=>{
 console.log(err)
 })
 }
 }
 
- **发送并发请求**
 created(){ //在vue的生命周期函数中
 axios.all([axios.get('http://123.207.32.32:8000/api'),
 axios.get('http://123.207.32.32:8000/api')],
 {params:{type:'sell',page:1}})
 .then(axios.spread((res1,res2)=>{
 console.log(res1);
 console.log(res2);
 }))
 }
 
全局配置
- 在开发中可能很多参数都是固定的,这个时候我们可以进行一些抽取, 也可以利用axiox的全局配置
- //提取全局的配置
 axios.defaults.baseURL = 'http://123.207.32.32:8000'
 //发送并请求
 axios.all([axios.get('/api'),
 axios.get('/home'),
 {params:{type:'sell',page:1}}])
 .then(axios.spread((res1,res2)={
 console.log(res1);
 console.log(res2);
 }))
 
- 常见的全局配置
- 1.请求地址:url: '/user' 2.请求类型:method: 'get',
- 3.请根路径:baseURL: 'http://www.mt.com/api' 4.请求前的数据处理:transformRequest:[function(data){}],
- 5.请求后的数据处理:transformResponse: [function(data){}] 6.自定义的请求头:headers:{'x-Requested-With':'XMLHttpRequest'},
- 7.URL查询对象:params:{ id: 12 } 8.查询对象序列化函数:paramsSerializer: function(params){ }
- 9.request body:data: { key: 'aa'} 10.超时设置s:timeout: 1000,
- 11.跨域是否带Token:withCredentials: false 12.自定义请求处理:adapter: function(resolve, reject, config){},
- 13.身份验证信息:auth: { uname: '', pwd: '12'} 14.响应的数据格式 json / blob /document /arraybuffer / text / stream:responseType: 'json',
 
axios的实例
- 为什么要创建axios的实例呢?
- 当给该实例设置一些默认配置时, 这些配置就被固定下来了.但是后续开发中, 某些配置可能会不太一样.
- 这个时候, 我们就可以创建新的实例, 并且传入属于该实例的配置信息.
- //创建新的实例
 const axiosInstance =axios.create({
 baseURL:'http://123.207.32.32:8000',
 timeout:5000,
 headers:{
 'Content-Type':'application/x-www.from-urlencoded'
 }
 //发送网络请求
 axiosInstance({
 url:'/api',
 method:'get',
 }).then(res=>{
 console.log(res);
 }).catch(err=>{
 console.log(err);
 })
 })
 
axios封装
- //创建的axios文件中
 import originAxios from 'axios'
 export default function axios(option){
 return new Promise((resolve,reject)={
 //1.创建axios实例
 const instance = originAxios.create({
 baseURL:'/api',
 timeout:5000,
 headers:''
 }); //2.传入的对象进行网络请求(optiond)
 instance(option).then(res=>{
 resolve(res);
 }).catch(err=>{
 reject(err);
 })
 //对第二步的简写(因为axios本身返回的就是一个Promise)
 //去掉export下面return Promise的那一行
 return instance(config)
 })
 }
 
Axios拦截器
- axios提供了拦截器,用于我们在发送每次请求或者得到相应后,进行对应的处理
- **请求拦截**
 instance.interceptors.request.use(config=>{
 console.log('来到了request拦截的success中')
 // 1.当发送网络请求时,在页面中添加了一个loading组件,作为动画 // 2. 某些请求要求用户必须登陆,判断用户是否有token,如果没有token跳转到login页面 // 3.对请求的参数进行序列化
 config.data =qs.stringify(config.data)
 console.log(config) //当拦截完了一定要记得将拦截返回
 return config
 }) use()中还有一个err参数,表示请求错误后的拦截,请求拦截中错误拦截比较少,通常都是配置相关的拦截,可能的错误比如请求超时时,可以将页面跳转到一个错误的页面中
 
- **响应拦截**
 响应的成功拦截中,主要是对数据进行过滤
 instance.interceptors.response.use(response=>{
 console.log("来到了response拦截success中");
 return response.data
 响应失败的拦截中,可以根据status判断报错的错误码,跳转到不同的错误提示页面
 },err => {
 console.log('来到了response拦截的failure中')
 if( err && err.response){
 switch(err.response.status){
 case 400:
 err.message = '请求错误',
 break;
 case 401:
 err.message = '未授权的访问',
 break;
 }
 }
 return err
 })
 
axios学习和使用的更多相关文章
- axios学习笔记
		axios学习笔记axios文档源地址:https://github.com/axios/axios0.概念axios 在NPM上的描述是:Promise based HTTP client for ... 
- axios 学习笔记
		官方文档地址:https://github.com/axios/axios axios 是一个基于 Promise 的HTTP库,可以用在浏览器和 node.js 中 特性: • 从浏览器发起 XML ... 
- axios学习 - 数据获取及渲染
		在app.vue和main.js中引入axios(import axios from 'axios') 基本代码: axios.get('/axios.json') .then(function(re ... 
- vue学习之ajax 简单快速使用axios
		vue2.x 推荐使用axios 1.首先使用安装 npm install axios -S 2.在哪用在哪引入 import axios from 'axios' 或则在main.js 中引入 在申 ... 
- axios浏览器异步请求方法封装  XMLHttpRequest
		axios学习笔记defaults(浏览器端异步请求处理方式) 浏览器异步请求方法封装,主要使用XMLHttpRequest lib/adapters/xhr.js //入口 var utils = ... 
- axios源码入口以及公用方法
		axios学习笔记(公用方法) 源码地址 找到入口文件 axios/lib/axios.js var utils = require('./utils'); var bind = require('. ... 
- defaults(默认配置)和mergeConfig(合并config方法)
		axios学习笔记defaults(默认配置)和mergeConfig(合并config方法) 源码地址 找到入口文件 axios/lib/axios.js ... var mergeConfig = ... 
- Vue2学习小记-给Vue2路由导航钩子和axios拦截器做个封装
		1.写在前面 最近在学习Vue2,遇到有些页面请求数据需要用户登录权限.服务器响应不符预期的问题,但是总不能每个页面都做单独处理吧,于是想到axios提供了拦截器这个好东西,再于是就出现了本文. 2. ... 
- vue学习目录 vue初识 this指向问题 vue组件传值 过滤器 钩子函数 路由 全家桶 脚手架 vuecli element-ui   axios bus
		vue学习目录 vue学习目录 Vue学习一之vue初识 Vue学习二之vue结合项目简单使用.this指向问题 Vue学习三之vue组件 Vue学习四之过滤器.钩子函数.路由.全家桶等 Vue学习之 ... 
随机推荐
- 前端项目自动化构建工具——Webpack入门教程
			参考资料:https://www.webpackjs.com/(中文文档) https://www.webpackjs.com/(官方文档) 首先有必要说明一下,本文侧重讲解webpack基本配置 ... 
- kafka对消费者分配分区规则(Java源码)
			在上一篇 kafka topic消息分配partition规则(Java源码) 我们对生产者产生的消息分配partition规则进行了分析,那么本章我们来看看消费者是怎么样分配partition的. ... 
- JAVA集合框架包含的内容
			Java集合框架提供了一套性能优良.使用方便的接口和类,他们位于java.util包中. Collection接口 主要有List.Set等实现类,Map接口主要有HashMap.TreeMap等实现 ... 
- Airflow:TypeError an integer is required (got type NoneType) 一次诡异问题排查
			 当使用rabbitmq作为airflow的broker的时候,启动scheduler,即执行airflow scheduler命令的时候抛出以下异常: Traceback (most recent ... 
- centos7上部署dubbo管理控制台dubbo-admin
			centos7上部署dubbo管理控制台dubbo-admin 1 准备工作 服务器:系统centos7, 内存4G, 存储60G, ip 192.168.159.128 软件环境: 安装有jdk1. ... 
- Admiral(双向BFS + Hash)
			Problem Description Suppose that you are an admiral of a famous naval troop. Our naval forces have g ... 
- vue入门之创建第一个实例,挂载点、模板和实例之间的关系
			<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ... 
- [Linux] telnet 具体到某个端口Connection refused
			可以参考这个链接:https://q.cnblogs.com/q/106337/ 
- Java异常详谈
			什么是异常: 异常(Exception)是程序运行过程中发生的事件,该事件可以中断程序指令的正常执行流程. 注意: 如果实际抛出的异常对象属于Exception的子类对象,而继承自Throwable类 ... 
- VM虚拟机,如何放大虚拟机屏幕,如何导出虚拟机ovf
			放大屏幕:,第一打开虚拟机,第二在需要放大的虚拟机上安装VMware tools 第三步查看>自动调节大小>自适应客户机.这样就可以放大屏幕了. 没有放大的屏幕 找到安装VMware ... 
