详解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 相关文章推荐
jquery模拟LCD 时钟的html文件源代码
Jun 16 Javascript
js实现模拟计算器退格键删除文字效果的方法
May 07 Javascript
jQuery实现仿腾讯视频列表分页效果的方法
Aug 07 Javascript
jquery中的工具使用方法$.isFunction, $.isArray(), $.isWindow()
Aug 09 Javascript
一系列Bootstrap导航条使用方法分享
Apr 29 Javascript
js实时获取窗口大小变化的实例代码
Nov 18 Javascript
jQuery表单元素选择器代码实例
Feb 06 Javascript
javascript实现滑动解锁功能
Mar 22 Javascript
详解React-Native解决键盘遮挡问题(Keyboard遮挡问题)
Jul 13 Javascript
浅谈原型对象的常用开发模式
Jul 22 Javascript
Vue组件之全局组件与局部组件的使用详解
Oct 09 Javascript
js实现超级玛丽小游戏
Mar 18 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
用PHP生成自己的LOG文件
2006/10/09 PHP
discuz7 phpMysql操作类
2009/06/21 PHP
ThinkPHP多表联合查询的常用方法
2020/03/24 PHP
PHP中exec函数和shell_exec函数的区别
2014/08/20 PHP
推荐一款MAC OS X 下php集成开发环境mamp
2014/11/08 PHP
Yii入门教程之Yii安装及hello world
2014/11/25 PHP
PHP常用字符串操作函数实例总结(trim、nl2br、addcslashes、uudecode、md5等)
2016/01/09 PHP
让浏览器非阻塞加载javascript的几种方法小结
2011/04/25 Javascript
IE6、IE7中获取Button元素的值的bug说明
2011/08/28 Javascript
将form表单中的元素转换成对象的方法适用表单提交
2014/05/02 Javascript
jQuery通过Ajax返回JSON数据
2015/04/28 Javascript
indexedDB bootstrap angularjs之 MVC DOMO (应用示例)
2016/06/20 Javascript
AngularJS基础 ng-keydown 指令简单示例
2016/08/02 Javascript
AngularJs 动态加载模块和依赖
2016/09/15 Javascript
Node实战之不同环境下配置文件使用教程
2018/01/02 Javascript
微信小程序定位当前城市的方法
2018/07/19 Javascript
浅谈Vue.js 关于页面加载完成后执行一个方法的问题
2019/04/01 Javascript
Vue开发环境跨域访问问题
2020/01/22 Javascript
Python cookbook(数据结构与算法)让字典保持有序的方法
2018/02/18 Python
Anaconda下配置python+opencv+contribx的实例讲解
2018/08/06 Python
Python爬虫基础之XPath语法与lxml库的用法详解
2018/09/13 Python
对python 匹配字符串开头和结尾的方法详解
2018/10/27 Python
对Pandas MultiIndex(多重索引)详解
2018/11/16 Python
django获取from表单multiple-select的value和id的方法
2019/07/19 Python
详解python中eval函数的作用
2019/10/22 Python
Python使用qrcode二维码库生成二维码方法详解
2020/02/17 Python
html5 canvas移动浏览器上实现图片压缩上传
2016/03/11 HTML / CSS
详解移动端Html5页面中1px边框的几种解决方法
2018/07/24 HTML / CSS
台湾生鲜宅配:大口市集
2017/10/14 全球购物
英国领先的运动营养品牌:Protein Dynamix
2018/01/02 全球购物
River Island美国官网:英国高街时尚品牌
2018/09/04 全球购物
优秀体育委员自荐书
2014/01/31 职场文书
外语系大学生自荐信范文
2014/03/01 职场文书
《沉香救母》教学反思
2014/04/19 职场文书
劳动竞赛口号
2014/06/16 职场文书
电脑关机速度很慢怎么办 提升电脑关机速度设置教程
2022/04/08 数码科技