详解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实现计算代码行数的简单方法附代码
Aug 13 Javascript
CSS JavaScript 实现菜单功能 改进版
Dec 09 Javascript
Js四则运算函数代码
Jul 21 Javascript
JS禁用浏览器退格键实现思路及代码
Oct 29 Javascript
随鼠标上下滚动的jquery代码
Dec 05 Javascript
使用canvas实现仿新浪微博头像截取上传功能
Sep 02 Javascript
JavaScript必知必会(二) null 和undefined
Jun 08 Javascript
浅谈在js传递参数中含加号(+)的处理方式
Oct 11 Javascript
基于Vue.js实现简单搜索框
Mar 26 Javascript
javascript删除html标签函数cIsHTML
Jan 09 Javascript
如何实现echarts markline标签名显示自己想要的
Jul 20 Javascript
vue 判断两个时间插件结束时间必选大于开始时间的代码
Nov 04 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
用windows下编译过的eAccelerator for PHP 5.1.6实现php加速的使用方法
2007/09/30 PHP
让PHP开发者事半功倍的十大技巧小结
2010/04/20 PHP
第4章 数据处理-php字符串的处理-郑阿奇(续)
2011/07/04 PHP
apache php模块整合操作指南
2012/11/16 PHP
怎样使用php与jquery设置和读取cookies
2013/08/08 PHP
PHP使用stream_context_create()模拟POST/GET请求的方法
2016/04/02 PHP
PHP 配置后台登录以及模板引入
2017/01/24 PHP
laravel 5.1下php artisan migrate的使用注意事项总结
2017/06/07 PHP
PHP使用Nginx实现反向代理
2017/09/20 PHP
jQuery中事件对象e的事件冒泡用法示例介绍
2014/04/25 Javascript
BootStrap和jQuery相结合实现可编辑表格
2016/04/21 Javascript
Angularjs---项目搭建图文教程
2016/07/08 Javascript
多功能jQuery树插件zTree实现权限列表简单实例
2016/07/12 Javascript
ES6概念 Symbol.keyFor()方法
2016/12/25 Javascript
jQuery插件imgAreaSelect基础讲解
2017/05/26 jQuery
Vue.js实现网格列表布局转换方法
2017/08/25 Javascript
vue中vee validate表单校验的几种基本使用
2018/06/25 Javascript
基于javascript处理二进制图片流过程详解
2020/06/08 Javascript
vue 使用post/get 下载导出文件操作
2020/08/07 Javascript
[01:23:59]2018DOTA2亚洲邀请赛 4.1 小组赛 B组 VP vs Secret
2018/04/03 DOTA
Python计算一个文件里字数的方法
2015/06/15 Python
Python基于sftp及rsa密匙实现远程拷贝文件的方法
2016/09/21 Python
Python实现的视频播放器功能完整示例
2018/02/01 Python
Python实现微信好友的数据分析
2019/12/16 Python
python numpy数组中的复制知识解析
2020/02/03 Python
Tensorflow: 从checkpoint文件中读取tensor方式
2020/02/10 Python
python 实现压缩和解压缩的示例
2020/09/22 Python
eBay荷兰购物网站:eBay.nl
2020/06/26 全球购物
数控专业大学生的自我鉴定
2013/11/13 职场文书
艺术设计专业毕业生推荐信
2014/07/08 职场文书
青年标兵事迹材料
2014/08/16 职场文书
励志演讲稿200字
2014/08/21 职场文书
违章停车检讨书
2014/10/21 职场文书
乡镇科协工作总结2015
2015/05/19 职场文书
不同意离婚答辩状
2015/05/22 职场文书
聊聊基于pytorch实现Resnet对本地数据集的训练问题
2022/03/25 Python