vue简单封装axios插件和接口的统一管理操作示例


Posted in Javascript onFebruary 02, 2020

本文实例讲述了vue简单封装axios插件和接口的统一管理操作。分享给大家供大家参考,具体如下:

现在很多公司的项目都是前后端分离的项目,那么说到前后端分离,必定会有ajax请求来获得后台的数据。

在做jquery项目的时候,我们都会使用它封装好的方法来直接发起ajax请求。

在vue项目中,我们使用最多的就是axios这个插件,下面就简单的封装下这个插件并且把接口给统一化管理。

一、安装和配置

1.在项目根目录下打开终端安装

npm install axios -S

2.安装完成以后,在src目录下创建utils目录,用来存放用到的所有工具和插件(个人习惯)

3.在utils目录创建request.js文件,用来配置axios,代码如下:

import axios from 'axios' //引入axios
const service = axios.create({
 // api 的 baseUrl 就是每个请求前面相同的地址,这个地方因为我配置了环境,所以直接取环境里的配置
 baseURL: process.env.BASE_URL,
 timeout: 5000 // 请求超时时间
})
// request拦截器
service.interceptors.request.use(
 config => {
  //这里是每个请求的设置,比如每个请求都携带一个token,或者当为post请求时,引入qs格式化参数。
  return config
 },
 error => {
  console.log('请求失败:' + error)
  Promise.reject(error)
 }
)
// response 拦截器
service.interceptors.response.use(
 response => {
  const res = response.data
  //这个地方的code自己与后台约定(可以根据状态码,设置自己要提示的信息)
  if (res._code !== '10000') {
   //在此可以加几种比较普遍的设置,然后可以把单独的返到页面中设置
   return Promise.reject(res)
  } else {
   return response.data
  }
 },
 error => {
  console.log('响应失败:' + error)
  return Promise.reject(error)
 }
)
export default service

二、使用

1.在src目录下创建api文件夹,api文件夹与页面文件夹目录结构相同,名字最好也其相同语义的名字(个人习惯,方便管理)

2.比如我的页面结构里有个manage目录,里面有个user.vue页面,那么相同的在api目录下,也应有个manage目录,里面有个user.js文件

3.user.js代码如下:

//引入配置好的axios
import request from '@/utils/request'
//获取用户列表
export const getUserList = params => { return request({ url: '你的接口地址', method: 'get', params }) }
//增加用户
export const addUser = data => { return request({ url: '你的接口地址', method: 'post', data }) }
//删除用户
export const delUser = data => { return request({ url: '你的接口地址', method: 'post', data }) }
//修改用户信息
export const addUserInfo = data => { return request({ url: '你的接口地址', method: 'post', data }) }
//查询用户详细信息
export const getUserDetail = params => { return request({ url: '你的接口地址', method: 'get', params }) }

4.user.vue代码如下:

<script>
import userApi from '@/api/manage/user'
export default {
  name: "User",
  data(){
    return {}
  },
  created(){
    //不需要传递参数
    userApi.getUserList()
    .then( res => {
      //成功回调
    })
    .catch( err => {
      //失败回调
    })
    //需要传递参数
    let userInfo = {
     name: '张三',
     age: 18
    }
    userApi.addUser(userInfo)
    .then( res => {
      //成功回调
    })
    .catch( err => {
      //失败回调
    })
  }
}
</script>

附常见状态码:

const status = error.response.status;
let msg = "";
switch (status) {
   case 400:
    msg = "错误的请求"
    break;
   case 401:
    msg = "未授权,请重新登录"
    break;
   case 403:
    msg = "拒绝访问"
    break;
   case 404:
    msg = "未找到该接口地址"
    break;
   case 405:
    msg = "请求未被允许"
    break;
   case 408:
    msg = "请求超时"
    break;
   case 500:
    msg = "服务端出错了"
    break;
   case 501:
    msg = "网络未实现"
    break;
   case 502:
    msg = "网络错误"
    break;
   case 503:
    msg = "服务不可用"
    break;
   case 504:
    msg = "网络超时"
    break;
   case 505:
    msg = "http版本不支持"
    break;
   default:
    msg = "连接错误"
    break;
 }

希望本文所述对大家vue.js程序设计有所帮助。

Javascript 相关文章推荐
游戏人文件夹程序 ver 4.03
Jul 14 Javascript
把textarea中字符串里含有的回车换行替换成&amp;lt;br&amp;gt;的javascript代码
Apr 20 Javascript
JS保留小数点(四舍五入、四舍六入)实现思路及实例
Apr 25 Javascript
jQuery选择器全面总结
Jan 06 Javascript
搭建pomelo 开发环境
Jun 24 Javascript
如何实现chrome浏览器关闭页面时弹出“确定要离开此面吗?”
Mar 05 Javascript
基于jQuery实现网页打印功能
Dec 01 Javascript
Bootstrap fileinput组件封装及使用详解
Mar 10 Javascript
vue+ElementUI实现订单页动态添加产品数据效果实例代码
Jul 13 Javascript
Mobile Web开发基础之四--处理手机设备的横竖屏问题
Aug 11 Javascript
JS中实现隐藏部分姓名或者电话号码的代码
Jul 17 Javascript
Vue中Axios从远程/后台读取数据
Jan 21 Javascript
vue实现路由不变的情况下,刷新页面操作示例
Feb 02 #Javascript
JQuery事件委托(适用于给动态生成的脚本元素添加事件)
Feb 01 #jQuery
基于node+vue实现简单的WebSocket聊天功能
Feb 01 #Javascript
基于vue和websocket的多人在线聊天室
Feb 01 #Javascript
node crawler如何添加promise支持
Feb 01 #Javascript
js 计算月/周的第一天和最后一天代码
Feb 01 #Javascript
js获取本日、本周、本月的时间代码
Feb 01 #Javascript
You might like
收听短波不可能有声音清晰的品质吗
2021/03/01 无线电
PHP实现域名whois查询的代码(数据源万网、新网)
2010/02/22 PHP
phpmailer简单发送邮件的方法(附phpmailer源码下载)
2016/06/13 PHP
yii2.0实现创建简单widgets示例
2016/07/18 PHP
CI框架中类的自动加载问题分析
2016/11/21 PHP
解决Laravel5.2 Auth认证退出失效的问题
2019/10/14 PHP
TNC vs BOOM BO3 第三场2.13
2021/03/10 DOTA
JQERY limittext 插件0.2版(长内容限制显示)
2010/08/27 Javascript
基于jquery打造的百分比动态色彩条插件
2012/09/19 Javascript
防止jQuery ajax Load使用缓存的方法小结
2014/02/22 Javascript
开源的javascript项目Kissy介绍
2014/11/28 Javascript
javascript引用类型指针的工作方式
2015/04/13 Javascript
javascript检查浏览器是否已经启用XX功能
2015/07/10 Javascript
jQuery判断checkbox选中状态
2016/05/12 Javascript
基于bootstrap风格的弹框插件
2016/12/28 Javascript
JavaScript数据结构之二叉查找树的定义与表示方法
2017/04/12 Javascript
妙用Angularjs实现表格按指定列排序
2017/06/23 Javascript
详解Vue中组件传值的多重实现方式
2019/08/16 Javascript
微信小程序开发摇一摇功能
2019/11/22 Javascript
Python中使用wxPython开发的一个简易笔记本程序实例
2015/02/08 Python
NumPy 数学函数及代数运算的实现代码
2018/07/18 Python
Python玩转PDF的各种骚操作
2019/05/06 Python
tensorflow安装成功import tensorflow 出现问题
2020/04/16 Python
Django REST Swagger实现指定api参数
2020/07/07 Python
python可视化分析的实现(matplotlib、seaborn、ggplot2)
2021/02/03 Python
pycharm 使用anaconda为默认环境的操作
2021/02/05 Python
CSS3+Sprite实现僵尸行走动画特效源码
2016/01/27 HTML / CSS
做一个能自适应高度的textarea的示例代码
2019/09/06 HTML / CSS
Amara美国站:英国高端家居礼品网站,世界各地的奢侈家具品牌
2017/07/26 全球购物
如何找出EMP表里面SALARY第N高的employee
2013/12/05 面试题
2014班子成员自我剖析材料思想汇报
2014/10/01 职场文书
暂停营业通知
2015/04/25 职场文书
2016年寒假学习心得体会
2015/10/09 职场文书
一文搞懂Python Sklearn库使用
2021/08/23 Python
Java 关于String字符串原理上的问题
2022/04/07 Java/Android
Python进程间的通信之语法学习
2022/04/11 Python