详解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 相关文章推荐
文本链接逐个出现的js脚本
Dec 12 Javascript
到处都是jQuery选择器的年代 不了解它们的性能,行吗
Jun 18 Javascript
JS获取随机数函数可自定义最小值最大值
May 08 Javascript
JS获得选取checkbox整行数据的方法
Jan 28 Javascript
Jquery中CSS选择器用法分析
Feb 10 Javascript
JavaScript编程中实现对象封装特性的实例讲解
Jun 24 Javascript
浅谈vue-router2路由参数注意的问题
Nov 08 Javascript
vue cli 全面解析
Feb 28 Javascript
基于Vue2x实现响应式自适应轮播组件插件VueSliderShow功能
May 16 Javascript
详解JSON Web Token 入门教程
Jul 30 Javascript
JS获取并处理php数组的方法实例分析
Sep 04 Javascript
Vue 中获取当前时间并实时刷新的实现代码
May 12 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
PHP中上传多个文件的表单设计例子
2014/11/19 PHP
PHP的Yii框架的基本使用示例
2015/08/21 PHP
Docker搭建自己的PHP开发环境
2018/02/24 PHP
PHP实现压缩图片尺寸并转为jpg格式的方法示例
2018/05/10 PHP
PHP大文件分割分片上传实现代码
2020/12/09 PHP
关于jquery input textare 事件绑定及用法学习
2013/04/03 Javascript
JS实现超简洁网页title标题跑动闪烁提示效果代码
2015/10/23 Javascript
jQuery基于排序功能实现上移、下移的方法
2016/11/26 Javascript
清除输入框内的空格
2016/12/21 Javascript
详解webpack自动生成html页面
2017/06/29 Javascript
在 Node.js 中使用原生 ES 模块方法解析
2017/09/19 Javascript
详解vue-cli3开发Chrome插件实践
2019/05/29 Javascript
[36:05]完美世界DOTA2联赛循环赛 Forest vs DM 第一场 11.06
2020/11/06 DOTA
Python3读取文件常用方法实例分析
2015/05/22 Python
Python合并两个字典的常用方法与效率比较
2015/06/17 Python
Python正则表达式教程之二:捕获篇
2017/03/02 Python
Django中使用celery完成异步任务的示例代码
2018/01/23 Python
python微信跳一跳系列之棋子定位颜色识别
2018/02/26 Python
深入浅析Python 中 is 语法带来的误解
2019/05/07 Python
django认证系统 Authentication使用详解
2019/07/22 Python
python读文件的步骤
2019/10/08 Python
利用python实现PSO算法优化二元函数
2019/11/13 Python
通过实例简单了解Python sys.argv[]使用方法
2020/08/04 Python
详解python tkinter 图片插入问题
2020/09/03 Python
Python爬虫回测股票的实例讲解
2021/01/22 Python
程序集与命名空间有什么不同
2014/07/25 面试题
单位门卫岗位职责
2013/12/20 职场文书
教师党性分析材料
2014/02/04 职场文书
经贸专业毕业生求职信
2014/03/23 职场文书
工程负责人任命书
2014/06/06 职场文书
大学毕业生个人自荐书
2014/07/02 职场文书
民主生活会对照检查材料(统计局)
2014/09/21 职场文书
个人对照检查材料思想汇报(四风问题)
2014/09/25 职场文书
2014红色之旅心得体会
2014/10/07 职场文书
2015年环卫处个人工作总结
2015/07/27 职场文书
Python进阶学习之带你探寻Python类的鼻祖-元类
2021/05/08 Python