VueJs 搭建Axios接口请求工具


Posted in Javascript onNovember 20, 2017

axios 简介

axios 是一个基于Promise 用于浏览器和 nodejs 的 HTTP 客户端,它本身具有以下特征:

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

上一章,我们认识了项目的目录结构,以及对项目的目录结构做了一些调整,已经能把项目重新跑起来了。今天我们来搭建api接口调用工具Axios。Vue本身是不支持ajax调用的,如果你需要这些功能就需要安装对应的工具。

支持ajax请求的工具很多,像superagent和axios。今天我们用的就是axios,因为听说最近网上大部分的教程书籍都使用的是axios,本身axios这个工具就已经做了很好的优化和封装,但是在使用时,还是比较繁琐,所以我们来重新封装一下。

安装Axios工具

VueJs 搭建Axios接口请求工具

cnpm install axios -D 

在安装的时候,一定要切换进入咱们的项目根目录,再运行安装命令,然后如提示以上信息,则表示安装完成。

封装Axios工具

编辑src/api/index.js文件(我们在上一章整理目录结构时,在src/api/目录新建了一个空的index.js文件),现在我们为该文件填写内容。

// 配置API接口地址
var root = 'https://cnodejs.org/api/v1'
// 引用axios
var axios = require('axios')
// 自定义判断元素类型JS
function toType (obj) {
 return ({}).toString.call(obj).match(/\s([a-zA-Z]+)/)[1].toLowerCase()
}
// 参数过滤函数
function filterNull (o) {
 for (var key in o) {
  if (o[key] === null) {
   delete o[key]
  }
  if (toType(o[key]) === 'string') {
   o[key] = o[key].trim()
  } else if (toType(o[key]) === 'object') {
   o[key] = filterNull(o[key])
  } else if (toType(o[key]) === 'array') {
   o[key] = filterNull(o[key])
  }
 }
 return o
}
/*
 接口处理函数
 这个函数每个项目都是不一样的,我现在调整的是适用于
 https://cnodejs.org/api/v1 的接口,如果是其他接口
 需要根据接口的参数进行调整。参考说明文档地址:
 https://cnodejs.org/topic/5378720ed6e2d16149fa16bd
 主要是,不同的接口的成功标识和失败提示是不一致的。
 另外,不同的项目的处理方法也是不一致的,这里出错就是简单的alert
*/
function apiAxios (method, url, params, success, failure) {
 if (params) {
  params = filterNull(params)
 }
 axios({
  method: method,
  url: url,
  data: method === 'POST' || method === 'PUT' ? params : null,
  params: method === 'GET' || method === 'DELETE' ? params : null,
  baseURL: root,
  withCredentials: false
 })
 .then(function (res) {
 if (res.data.success === true) {
  if (success) {
   success(res.data)
  }
 } else {
  if (failure) {
   failure(res.data)
  } else {
   window.alert('error: ' + JSON.stringify(res.data))
  }
 }
 })
 .catch(function (err) {
  let res = err.response
  if (err) {
   window.alert('api error, HTTP CODE: ' + res.status)
  }
 })
}
// 返回在vue模板中的调用接口
export default {
 get: function (url, params, success, failure) {
  return apiAxios('GET', url, params, success, failure)
 },
 post: function (url, params, success, failure) {
  return apiAxios('POST', url, params, success, failure)
 },
 put: function (url, params, success, failure) {
  return apiAxios('PUT', url, params, success, failure)
 },
 delete: function (url, params, success, failure) {
  return apiAxios('DELETE', url, params, success, failure)
 }
}

更多关于AxIos的解释请参见:https://github.com/mzabriskie/axios

配置Axios工具

我们在使用之前,需要在src/main.js中进行简单的配置,先来看一下原始的main.js文件

// The Vue build version to load with the `import` command
// (runtime-only or standalone) has been set in webpack.base.conf with an alias.
import Vue from 'vue'
import App from './App'
import router from './router'
Vue.config.productionTip = false
/* eslint-disable no-new */
 new Vue({
 el: '#app',
 router,
 template: '<App/>',
 components: { App }
})

修改为:

// The Vue build version to load with the `import` command
// (runtime-only or standalone) has been set in webpack.base.conf with an alias.
import Vue from 'vue'
import App from './App'
import router from './router'
// 引用API文件
import api from './api/index.js'
// 将API方法绑定到全局
Vue.prototype.$api = api
Vue.config.productionTip = false
/* eslint-disable no-new */
new Vue({
 el: '#app',
 router,
 template: '<App/>',
 components: { App }
})

通过以上的配置,我们就可以在项目中使用axios工具了,接下来我们来测试一下这个工具。

使用Axios工具

我们来修改一下 src/page/Index.vue 文件,将代码调整为以下代码:

<template>
 <div>index page</div>
</template>
<script>
export default {
 created () {
  this.$api.get('topics', null, r => {
   console.log(r)
  })
 }
}
</script>

我们在Index.vue中向浏览器的控制台输入一些接口请求到的数据,如果你和我也一样,那说明我们的接口配置完成正确。如下图:

VueJs 搭建Axios接口请求工具

如果你是按我的操作一步一步来,那最终结果应该和我一样。如果出错请仔细检查代码。

Javascript 相关文章推荐
javascript读取RSS数据
Jan 20 Javascript
JS类库Bindows1.3中的内存释放方式分析
Mar 08 Javascript
jQuery筛选器children()案例详解(图文)
Feb 17 Javascript
一个jquery实现的不错的多行文字图片滚动效果
Sep 28 Javascript
Express实现前端后端通信上传图片之存储数据库(mysql)傻瓜式教程(二)
Dec 10 Javascript
浅析JavaScript中的平稳退化(graceful degradation)
Jul 24 Javascript
vue2中使用sass并配置全局的sass样式变量的方法
Sep 04 Javascript
layer ui 导入文件之前传入数据的实例
Sep 23 Javascript
微信小程序 wxParse插件显示视频问题
Sep 27 Javascript
javascript绘制简单钟表效果
Apr 07 Javascript
JavaScript设计模式之观察者模式与发布订阅模式详解
May 07 Javascript
使用JavaScript获取Django模板指定键值数据
May 27 Javascript
Vue2 SSR渲染根据不同页面修改 meta
Nov 20 #Javascript
详解vue+css3做交互特效的方法
Nov 20 #Javascript
解读ES6中class关键字
Nov 20 #Javascript
利用canvas中toDataURL()将图片转为dataURL(base64)的方法详解
Nov 20 #Javascript
Node.js 中使用 async 函数的方法
Nov 20 #Javascript
利用three.js画一个3D立体的正方体示例代码
Nov 19 #Javascript
IE11下使用canvas.toDataURL报SecurityError错误的解决方法
Nov 19 #Javascript
You might like
php实现向javascript传递数组的方法
2015/07/27 PHP
PHP 设计模式系列之 specification规格模式
2016/01/10 PHP
PHP模板引擎Smarty内建函数详解
2016/04/11 PHP
php自定义函数br2nl实现将html中br换行符转换为文本输入中换行符的方法【与函数nl2br功能相反】
2017/02/17 PHP
Thinkphp框架使用list_to_tree 实现无限级分类列出所有节点示例
2020/04/04 PHP
JQuery 网站换肤功能实现代码
2009/11/02 Javascript
javascript中apply和call方法的作用及区别说明
2014/02/14 Javascript
js简单的表格添加行和删除行操作示例
2014/03/31 Javascript
让IE8浏览器支持function.bind()方法
2014/10/16 Javascript
JQuery中DOM加载与事件执行实例分析
2015/06/13 Javascript
javascript封装简单实现方法
2015/08/11 Javascript
jQuery实现图片预加载效果
2015/11/27 Javascript
VC调用javascript的几种方法(推荐)
2016/08/09 Javascript
基于JavaScript实现移动端无限加载分页
2017/03/27 Javascript
vue移动端轻量级的轮播组件实现代码
2018/07/12 Javascript
微信小程序scroll-view实现字幕滚动
2018/07/14 Javascript
Vue面试题及Vue知识点整理
2018/10/07 Javascript
Nodejs实现用户注册功能
2019/04/14 NodeJs
Node.JS如何实现JWT原理
2020/09/18 Javascript
Python中用于去除空格的三个函数的使用小结
2015/04/07 Python
windows下python和pip安装教程
2018/05/25 Python
python爬虫之快速对js内容进行破解
2019/07/09 Python
简单分析python的类变量、实例变量
2019/08/23 Python
英国顶级足球鞋的领先零售商:Lovell Soccer
2019/08/27 全球购物
荣耀商城:HIHONOR
2020/11/03 全球购物
如何查询Oracle数据库中已经创建的索引
2013/10/11 面试题
教师网络培训感言
2014/03/09 职场文书
小班幼儿评语大全
2014/04/30 职场文书
做人民满意的公务员活动方案
2014/08/25 职场文书
交通工程专业推荐信
2014/09/06 职场文书
2014旅游局党组书记党建工作汇报材料
2014/11/02 职场文书
机动车交通事故协议书
2015/01/29 职场文书
2015年安全工作总结范文
2015/04/02 职场文书
2016年先进教师个人事迹材料
2016/02/26 职场文书
pytorch 如何把图像数据集进行划分成train,test和val
2021/05/31 Python
Beekeeper Studio开源数据库管理工具比Navicat更炫酷
2022/06/21 数据库