JS中封装axios来管控api的2种方式


Posted in Javascript onSeptember 11, 2019

前言:我们在开发项目的时候,往往要处理大量的接口.并且在测试环境 开发环境 生产环境使用的接口baseurl都不一样 这时候如果在开发环境完成之后切换每一个接口的baseurl会变的非常的麻烦,(要去每一个发出请求的页面都要去修改地址)

所以为了更好的管控这些api,我们需要自己封装一个axios定义统一的接口baseurl 这样在环境的切换的时候更好的管控和修改.话不多说上代码!!!

 自己创建一个api文件夹 即可

import axios from 'axios'
  为了处理java字符串问题
import qs from 'qs' 
创建一个axios实例 在其中设置超时时间和响应头
const http = axios.create({
  baseURL: process.env.VUE_APP_MOCK_DATA_URL, // api 的 base_url
  timeout: 3000,
  headers: {
    'Content-Type': 'application/json;charset=utf-8'
  }
})
/**
* 请求拦截 可以在发送请求的时候加上判断信息
*/
http.interceptors.request.use(config => {
 *****
  return config
}, error => {
  return Promise.reject(error)
})
/**
* 响应拦截 可以对传回的数据做出判断 
*/
http.interceptors.response.use(response => {
  return response
}, error => {
  return Promise.reject(error)
})

将这个封装好的axios 暴露出去

export default http

在main.js中引入并且挂载到原型对象上

import http from '@/api/api.js'
 Vue.prototype.$http = http

第一种封装的方式一般就是对于api数量不是特别多的时候 复杂层级不高的情况 这样封装完全可以

第二种方式

'use strict'

同样的也需要引入这两个包

import axios from 'axios'
import qs from 'qs'

// 设置拦截器 默认请求url得前缀
// axios.defaults.baseURL = process.env.NODE_ENV === 'production' ? '/custInfo' :
//  '127.0.0.1:8888', 
//  axios.interceptors.request.use(config => {
//   // // loading
//   return config
//  }, error => {
//   return Promise.reject(error)
//  })
// 
// axios.interceptors.response.use(response => {
//  return response
// }, error => {
//  return Promise.resolve(error.response)
// })

export default {
 post(url, data) {
  return new Promise((resolve, reject) => {
   axios({
    method: 'post',
    url,
    // qs这个插件主要是为了解决java后台接受到得参数必须是字符串
    data: qs.stringify(data),
    headers: {
     'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8'
    }
   }).then((res) => {
    resolve(res)
   }).catch((error) => {
    reject(error)
   })
  })
 },
 get (url, params) {
  return new Promise((resolve, reject) => {
   axios({
    method: 'get',
    url,
    params, // get 请求时带的参数
   }).then((res) => {
    resolve(res)
   }).catch((error) => {
    reject(error)
   })
  })
 }
}

这种封装好之后,就可以在创建一个文件夹  然后把所有的接口都写在一起

getCustValue(params) {
    return $http.post('/custOverview/getCustValue', params);
  },
  getTacntrt(params) {
    return $http.get('/dict/getTacntrtMgmtMsgMonth', params);
  },
  query(params) {
    return $http.post('/indexManager/queryVipFlowCount', params);
  }

然后一一列举 就可以非常好的梳理api 

总结

以上所述是小编给大家介绍的JS中封装axios来管控api的2种方式,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!
如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!

Javascript 相关文章推荐
jQuery中的.bind()、.live()和.delegate()之间区别分析
Jun 08 Javascript
js实现iframe跨页面调用函数的方法
Dec 13 Javascript
简介AngularJS的HTML DOM支持情况
Jun 17 Javascript
详解JavaScript编程中的数组结构
Oct 24 Javascript
Vue.js基础知识汇总
Apr 27 Javascript
使用BootStrapValidator完成前端输入验证
Sep 28 Javascript
JS获取html元素的标记名实现方法
Oct 08 Javascript
详解Angular2响应式表单
Jun 14 Javascript
Vue插值、表达式、分隔符、指令知识小结
Oct 12 Javascript
layui radio点击事件实现input显示和隐藏的例子
Sep 02 Javascript
微信小程序页面调用自定义组件内的事件详解
Sep 12 Javascript
vuex存值与取值的实例
Nov 06 Javascript
浅谈Vue3.0之前你必须知道的TypeScript实战技巧
Sep 11 #Javascript
layer实现登录弹框,登录成功后关闭弹框并调用父窗口的例子
Sep 11 #Javascript
如何实现一个简易版的vuex持久化工具
Sep 11 #Javascript
浅谈layer弹出层按钮颜色修改方法
Sep 11 #Javascript
layui实现鼠标移动到单元格上显示数据的方法
Sep 11 #Javascript
layer ui插件显示tips时,修改字体颜色的实现方法
Sep 11 #Javascript
layui操作列按钮个数和文字颜色的判断实例
Sep 11 #Javascript
You might like
一台收音机,让一家人都笑逐颜开!
2020/08/21 无线电
php-fpm配置详解
2014/02/12 PHP
php递归方法实现无限分类实例代码
2014/02/28 PHP
php curl请求信息和返回信息设置代码实例
2015/04/27 PHP
PHP中让json_encode不自动转义斜杠“/”的方法
2017/02/28 PHP
基于php编程规范(详解)
2017/08/17 PHP
使用PHP连接数据库_实现用户数据的增删改查的整体操作示例
2017/09/01 PHP
jQuery Tips 为AJAX回调函数传递额外参数的方法
2010/12/28 Javascript
JavaScript判断一个URL链接是否有效的实现方法
2011/10/08 Javascript
JQ获取动态加载的图片大小的正确方法分享
2013/11/08 Javascript
基于JavaScript怎么实现让歌词滚动播放
2015/11/03 Javascript
关于session和cookie的简单理解
2016/06/08 Javascript
浅谈jquery的map()和each()方法
2016/06/12 Javascript
JS 实现可停顿的垂直滚动实例代码
2016/11/23 Javascript
jquery实现表单获取短信验证码代码
2017/03/13 Javascript
微信小程序 跳转传参数与传对象详解及实例代码
2017/03/14 Javascript
解决vue动态为数据添加新属性遇到的问题
2018/09/18 Javascript
elementui之el-tebs浏览器卡死的问题和使用报错未注册问题
2019/07/06 Javascript
javascript设计模式 ? 适配器模式原理与应用实例分析
2020/04/13 Javascript
jQuery使用jsonp实现百度搜索的示例代码
2020/07/08 jQuery
解决在Vue中使用axios POST请求变成OPTIONS的问题
2020/08/14 Javascript
Vue插槽_特殊特性slot,slot-scope与指令v-slot说明
2020/09/04 Javascript
全面解析js中的原型,原型对象,原型链
2021/01/25 Javascript
[00:26]TI7不朽珍藏III——冥界亚龙不朽展示
2017/07/15 DOTA
python+pyqt实现右下角弹出框
2017/10/26 Python
Numpy 将二维图像矩阵转换为一维向量的方法
2018/06/05 Python
python计算两个地址之间的距离方法
2018/06/09 Python
python for 循环获取index索引的方法
2019/02/01 Python
numpy concatenate数组拼接方法示例介绍
2019/05/27 Python
PyQt5+Pycharm安装和配置图文教程详解
2020/03/24 Python
ProBikeKit澳大利亚:自行车套件,跑步和铁人三项装备
2016/11/30 全球购物
优秀士兵先进事迹
2014/02/06 职场文书
旅游局领导班子“四风”问题对照检查材料思想汇报
2014/09/29 职场文书
开学典礼观后感
2015/06/15 职场文书
2015年高三年级组工作总结
2015/07/21 职场文书
台积电称即便经济低迷也没有降价的计划
2022/04/21 数码科技