详解Vue 2.0封装axios笔记


Posted in Javascript onJune 22, 2017

前言

单页面应用大多采用前后端分离开发思路,我们知道,前端和后端交互有多中方式(服务器端渲染、Ajax、websocket等),今天我们主要讲解Ajax部分。

最近团队讨论了一下,Ajax 本身跟 Vue 并没有什么需要特别整合的地方,使用 fetch polyfill 或是 axios、superagent 等等都可以起到同等的效果,vue-resource 提供的价值和其维护成本相比并不划算,所以决定在不久以后取消对 vue-resource 的官方推荐。已有的用户可以继续使用,但以后不再把 vue-resource 作为官方的 ajax 方案。

vue更新至2.0之后,官方推荐的Ajax插件库是axios,而不再是vue-resource,理由如上。

axios快速使用

如何安装请移步axios,文档描述的很清楚。

常见用法

其实我们用的最多的就是get、post请求。

Performing a GET request

// get
axios.get('/user', {
  params: {
   ID: 12345
  }
 })
 .then(function (response) {
  console.log(response);
 })
 .catch(function (error) {
  console.log(error);
 });

Performing a POST request

axios.post('/user' , {
 params: {
  firstName: 'Fred',
  lastName: 'Flintstone'
 }
})
 .then(function (response) {
  console.log(response);
 })
 .catch(function (error) {
  console.log(error);
 });

掌握了以上两种最基本的用法,我们已经可以去进行开发了。

示例demo

演示了如何使用axios请求cnode社区的API。

请点击这里

axios的封装

上一步已经实现用axios请求网络资源,那为什么要封装axios呢?

以下几点原因:

  1. 配置通用项
  2. 统一处理请求错误,进行提示

完整源码

请点击这里

请求流程

详解Vue 2.0封装axios笔记

请求失败

通常请求失败有两种原因:

  1. 网络异常/服务器宕机
  2. 后端抛出错误

每个后端在请求失败时返回的数据结构大同小异,前后端可以商量好,我的后台返回给我的请求失败接口如下:

{
 "status": 1,
 "msg": "购物车为空",
 "success": false
}

如果只是普通用法,如下所示:

axios.post('/user' , {
 params: {
  firstName: 'Fred',
  lastName: 'Flintstone'
 }
})
 .then(function (response) {
  // 处理响应
  // 其中存在后端返回的错误
 })
 .catch(function (error) {
  // 网络异常引发的错误
 });

我们知道,一般中大型规模的项目,请求是比较多的,这样导致代码冗余,会越来越臃肿,我们可以对错误进行预处理。

拦截器

在普通用法中,then()处理响应,catch()处理错误,通过拦截器,可以提前判断,并返回二者之一。

这里并没有在拦截器中对错误进行处理,而是将响应或者错误返回到get/post请求的结果中,通过链式处理。

// 请求时的拦截
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);
 });

封装get,post方法

封装的get/post方法由3部分组成:

详解Vue 2.0封装axios笔记

基本配置

包括请求方法,基础url,相对url,参数,超时时间,请求头等。

checkStatus()

链式处理第一步,判断http状态码是否正常,和拦截器一样,请求正常则返回响应,请求异常则返回错误,最后返回结果给checkCode()。

checkCode()

链式处理第二步,处理上一步的结果,分别处理网络异常,以及后端返回的异常。

在组件中引用

引入封装后的axios

import http from '../utils/http'
import api from '../utils/api'

使用方法

fetchData: async function () {
   let params = {
   }
   const res = await http.get(api.right, params)
   if (res.data.success) {
    alert('请求成功')
   }
  }

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
js sort 二维数组排序的用法小结
Jan 24 Javascript
node.js中的path.join方法使用说明
Dec 08 Javascript
js插件设置innerHTML时在IE8下提示“未知运行时错误”解决方法
Apr 25 Javascript
JavaScript实现的伸展收缩型菜单代码
Oct 14 Javascript
jQuery web 组件 后台日历价格、库存设置的代码
Oct 14 Javascript
canvas实现图像放大镜
Feb 06 Javascript
利用Plupload.js解决大文件上传问题, 带进度条和背景遮罩层
Mar 15 Javascript
webpack实现热加载自动刷新的方法
Jul 30 Javascript
基于JavaScript实现抽奖系统
Jan 16 Javascript
vue实现动态显示与隐藏底部导航的方法分析
Feb 11 Javascript
简谈创建React Component的几种方式
Jun 15 Javascript
vue单应用在ios系统中实现微信分享功能操作
Sep 07 Javascript
EasyUI中的dataGrid的行内编辑
Jun 22 #Javascript
Ajax高级笔记 JavaScript高级程序设计笔记
Jun 22 #Javascript
vue 请求后台数据的实例代码
Jun 22 #Javascript
深入理解vue.js中的v-if和v-show
Jun 22 #Javascript
vue如何从接口请求数据
Jun 22 #Javascript
利用node.js制作命令行工具方法教程(一)
Jun 22 #Javascript
关于在vue-cli中使用微信自动登录和分享的实例
Jun 22 #Javascript
You might like
jQuery 锚点跳转滚动条平滑滚动一句话代码
2010/04/30 Javascript
Javascript 检测键盘按键信息及键码值对应介绍
2013/01/03 Javascript
jquery分页插件AmSetPager(自写)
2013/04/15 Javascript
浏览器页面区域大小的js获取方法
2013/09/21 Javascript
用于deeplink的js方法(判断手机是否安装app)
2014/04/02 Javascript
JavaScript实现的多个图片广告交替显示效果代码
2015/09/04 Javascript
Bootstrap教程JS插件弹出框学习笔记分享
2016/05/17 Javascript
使用Curl命令查看请求响应时间方法
2016/11/04 Javascript
JS实现加载时锁定HTML页面元素的方法
2017/06/24 Javascript
jQuery实现滚动效果
2017/11/17 jQuery
Vue iview-admin框架二级菜单改为三级菜单的方法
2018/07/03 Javascript
解决bootstrap模态框数据缓存的问题方法
2018/08/10 Javascript
微信小程序视图容器(swiper)组件创建轮播图
2020/06/19 Javascript
浅谈ng-zorro使用心得
2018/12/03 Javascript
微信小程序JS加载esmap地图的实例详解
2019/09/04 Javascript
简单使用webpack打包文件的实现
2019/10/29 Javascript
Vuex的API文档说明详解
2020/02/05 Javascript
[06:45]DOTA2卡尔工作室 英雄介绍幻影长矛手篇
2013/07/12 DOTA
用Python的Tornado框架结合memcached页面改善博客性能
2015/04/24 Python
详细解析Python中的变量的数据类型
2015/05/13 Python
Python进阶学习之特殊方法实例详析
2017/12/01 Python
手把手教你如何安装Pycharm(详细图文教程)
2018/11/28 Python
Python Flask 搭建微信小程序后台详解
2019/05/06 Python
python 爬虫爬取京东ps4售卖情况
2020/12/18 Python
世界顶级足球门票网站:Live Football Tickets
2017/10/14 全球购物
女子锻炼服装和瑜伽服装:Splits59
2019/03/04 全球购物
Deux par Deux官方网站:设计师童装
2020/01/03 全球购物
简单叙述一下MYSQL的优化
2016/05/09 面试题
自我鉴定思想方面
2013/10/07 职场文书
酒店行政人事部经理职务说明书
2014/02/26 职场文书
社区文艺活动方案
2014/08/19 职场文书
上班迟到检讨书范文300字
2014/11/02 职场文书
2014年员工工作总结范文
2014/11/18 职场文书
销售经理岗位职责
2015/01/31 职场文书
师范生见习自我总结
2015/06/23 职场文书
周末问候语大全
2015/11/10 职场文书