详解Vue前端对axios的封装和使用


Posted in Javascript onApril 01, 2019

Axios 是一个基于 promise 的 HTTP 库。将axios封装好后能更高效的开发并且方便维护,而且在以后的项目中也能直接套用,所以封装好是必要的。在参考了很多方法后,我拼凑出了一套我认为很实用的方法。

首先是http目录下的两个文件

helper.js

这个是功能性文件包括拼接url、过滤参数等,把方法集合到一个文件方便维护和修改。
读一遍知道他有什么功能就行了

const helper = {
 // 根据name获取地址栏的参数值
 getQueryString (name) {
  let reg = new RegExp(`(^|&)${name}=([^&]*)(&|$)`)
  let hash = window.location.hash
  let search = hash.split('?')
  let r = search[1] && search[1].match(reg)
  if (r != null) return r[2]; return ''
 },
 // 拼接参数至url
 queryString (url, query) {
  let str = []
  for (let key in query) {
   str.push(key + '=' + query[key])
  }
  let paramStr = str.join('&')
  return paramStr ? `${url}?${paramStr}` : url
 },
 
// 自定义判断元素类型JS
 toType(obj) {
	 return ({}).toString.call(obj).match(/\s([a-zA-Z]+)/)[1].toLowerCase()
	},
// 参数过滤函数
 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])
	  } else if (toType(o[key]) === 'number') {
	   o[key] = filterNull(o[key])
	  }
	 }
	 return o
	}

}
export default helper

http.js

接收请求,暴露接口,包含参数params、发往后端的url和token(如果不用JWT的同学可以省略参数token),处理后发往后端

import axios from 'axios'
let qs = require('querystring')
import helper from './helper'

//console.log( process.env.NODE_ENV)
//判断环境提供baseURL,注意要与后台地址一致
let root = process.env.NODE_ENV === 'development'
 // 开发环境api接口
 ?
 `http://localhost:3001/api`
 // 生产环境api接口
 :
 `http://127.0.0.1:3001/api`;
// 引用axios,设置头文件
axios.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded';


function apiAxios(method, url, params, token) {
 if (params) {
  params = helper.filterNull(params)
 }
 return axios({
  method: method,
  //拼接参数
  url: method === 'GET'|| method === 'DELETE' ? helper.queryString(url,params) : url,
  data: method === 'POST' || method === 'PUT' ? qs.stringify(params) : null,
  baseURL: root,
  timeout: 10000,
  headers: { Authorization: `Bearer ${token}` },	//jwt
  withCredentials: false
 })
}

// 返回在vue模板中的调用接口
export default {
 get: function (url, params, token) {
  return apiAxios('GET', url, params, token)
 },
 post: function (url, params, token) {
  return apiAxios('POST', url, params, token)
 },
 put: function (url, params, token) {
  return apiAxios('PUT', url, params, token)
 },
 delete: function (url, params, token) {
  return apiAxios('DELETE', url, params, token)
 },
}

api.js

封装前端api接口,接受前端页面发来的请求,封装后可根据函数名判断类型和url给axios文件,方便维护和开发。

import http from '../http/http.js'
export default {
 login(data, token){
  return http.post("/login",data, token)
 },
 getUserInfo(data, token){
  return http.get("/getUserInfo",data, token)
 }
}

在main.js中引用后就可以全局调用了

前端中用this.$api.urlName()的格式发送请求,也可以不经过api直接用this. $http,但是每次都要写url,当接口多的时候比较麻烦。所以推荐用api封装好。

import api from './api/api.js'
import http from './http/http.js'
//定义全局变量
Vue.prototype.$api = api

Vue.prototype.$http = http

前端中使用:

由于axios返回的是promise对象,所以要用 .then的形式接收后端发回来的response,然后做出相应的反馈。

//直接用this.$api调用api中接口,如果不封装api接口可以用this.$http
 this.$api.login(data, token).then((res) => {
	console.log(res)
 }).catch((err) => {
 	console.log(res)
 })

以上所述是小编给大家介绍的Vue前端对axios的封装和使用详解整合,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

Javascript 相关文章推荐
javascript实现上传图片前的预览(TX的面试题)
Aug 20 Javascript
基于jquery实现ajax无刷新评论
Aug 19 Javascript
JS实现table表格数据排序功能(可支持动态数据+分页效果)
May 26 Javascript
Backbone中View之间传值的学习心得
Aug 09 Javascript
JavaScript性能优化总结之加载与执行
Aug 11 Javascript
浅谈JS中的!=、== 、!==、===的用法和区别
Sep 24 Javascript
jquery css实现邮箱自动补全
Nov 14 Javascript
用iframe实现不刷新整个页面上传图片的实例
Nov 18 Javascript
微信小程序 数据交互与渲染实例详解
Jan 21 Javascript
js数字计算 误差问题的快速解决方法
Feb 28 Javascript
从组件封装看Vue的作用域插槽的实现
Feb 12 Javascript
基于redis的小程序登录实现方法流程分析
May 25 Javascript
浅谈js闭包理解
Apr 01 #Javascript
详解Vue之父子组件传值
Apr 01 #Javascript
微信二次分享报错invalid signature问题及解决方法
Apr 01 #Javascript
JS中的防抖与节流及作用详解
Apr 01 #Javascript
微信小程序 slot踩坑的解决
Apr 01 #Javascript
浅谈Vue.js 关于页面加载完成后执行一个方法的问题
Apr 01 #Javascript
VUE脚手架的下载和配置步骤详解
Apr 01 #Javascript
You might like
第八节 访问方式 [8]
2006/10/09 PHP
PHP采集相关教程之一 CURL函数库
2010/02/15 PHP
对text数据类型不支持代码页转换 从: 1252 到: 936
2011/04/23 PHP
PHP 日,周,月点击排行统计
2012/01/11 PHP
php mssql扩展SQL查询中文字段名解决方法
2012/10/15 PHP
解析如何通过PHP函数获取当前运行的环境 来进行判断执行逻辑(小技巧)
2013/06/25 PHP
php上传图片类及用法示例
2016/05/11 PHP
Thinkphp实现短信验证注册功能
2016/10/18 PHP
js操作时间(年-月-日 时-分-秒 星期几)
2010/06/20 Javascript
不用锚点也可以平滑滚动到页面的指定位置实现代码
2013/05/08 Javascript
jquery实现滑动图片自己测试的例子
2013/11/05 Javascript
jQuery中parents()和parent()的区别分析
2014/10/28 Javascript
跟我学习javascript的闭包
2015/11/16 Javascript
浅谈JS中json数据的处理
2016/06/30 Javascript
微信开发 使用picker封装省市区三级联动模板
2016/10/28 Javascript
简单的vue-resourse获取json并应用到模板示例
2017/02/10 Javascript
Angularjs渲染的 using 指令的星级评分系统示例
2017/11/09 Javascript
使用Vue-cli 中为单独页面设置背景图片铺满全屏
2020/07/17 Javascript
vue中配置scss全局变量的步骤
2020/12/28 Vue.js
Python全局变量用法实例分析
2016/07/19 Python
Python操作SQLite数据库的方法详解
2017/06/16 Python
python DataFrame 修改列的顺序实例
2018/04/10 Python
Python3批量生成带logo的二维码方法
2019/06/24 Python
python删除列表元素的三种方法(remove,pop,del)
2019/07/22 Python
django项目登录中使用图片验证码的实现方法
2019/08/15 Python
Python中sys模块功能与用法实例详解
2020/02/26 Python
历史学专业个人的自我评价
2013/10/13 职场文书
中学生家长评语大全
2014/04/16 职场文书
不服从公司安排检讨书
2014/09/24 职场文书
教师遵守党的政治纪律情况对照检查材料
2014/09/26 职场文书
2015年度班主任自我评价
2015/03/11 职场文书
道歉的话怎么说
2015/05/12 职场文书
高中美术教学反思
2016/02/17 职场文书
导游词之任弼时故居
2020/01/07 职场文书
CSS3 制作的彩虹按钮样式
2021/04/11 HTML / CSS
基于python实现银行管理系统
2021/04/20 Python