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 相关文章推荐
方便实用的jQuery checkbox复选框全选功能简单实例
Oct 09 Javascript
点击页面其它地方隐藏该div的两种思路
Nov 18 Javascript
javascript正则匹配汉字、数字、字母、下划线
Apr 10 Javascript
javascript实现字符串反转的方法
Feb 05 Javascript
JS和css实现检测移动设备方向的变化并判断横竖屏幕
May 25 Javascript
纯javascript模仿微信打飞机小游戏
Aug 20 Javascript
基于jQuery 实现bootstrapValidator下的全局验证
Dec 07 Javascript
javascript cookie的简单应用
Feb 24 Javascript
JavaScript ES5标准中新增的Array方法
Jun 28 Javascript
解决VUE中document.body.scrollTop为0的问题
Sep 15 Javascript
微信小程序MUI导航栏透明渐变功能示例(通过改变rgba的a值实现)
Jan 24 Javascript
20多个小事例带你重温ES10新特性(小结)
Sep 29 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
php实现二进制和文本相互转换的方法
2015/04/18 PHP
php源码分析之DZX1.5随机数函数random用法
2015/06/17 PHP
Laravel创建数据库表结构的例子
2019/10/09 PHP
laravel 解决groupBy时出现的错误 isn't in Group By问题
2019/10/17 PHP
JavaScript 设计模式之组合模式解析
2010/04/09 Javascript
JavaScript String.replace函数参数实例说明
2013/06/06 Javascript
实现checkbox全选、反选、取消JavaScript小脚本异常
2014/04/10 Javascript
JS实现div居中示例
2014/04/17 Javascript
javascript实现分栏显示小技巧附图
2014/10/13 Javascript
javascript实现倒计时跳转页面
2016/01/17 Javascript
关于BootStrap modal 在IOS9中不能弹出的解决方法(IOS 9 bootstrap modal ios 9 noticework)
2016/12/14 Javascript
webpack 4.0.0-beta.0版本新特性介绍
2018/02/10 Javascript
node 命令方式启动修改端口的方法
2018/05/12 Javascript
微信小程序仿微信运动步数排行(交互)
2018/07/13 Javascript
vue实现打印功能的两种方法
2018/09/07 Javascript
[04:48]DOTA2上海特锦赛小组赛第三日 TOP10精彩集锦
2016/02/28 DOTA
[52:14]VG vs Serenity 2018国际邀请赛小组赛BO2 第一场 8.17
2018/08/20 DOTA
python删除文件示例分享
2014/01/28 Python
Python的Flask框架与数据库连接的教程
2015/04/20 Python
python编程实现归并排序
2017/04/14 Python
K-means聚类算法介绍与利用python实现的代码示例
2017/11/13 Python
Python for循环生成列表的实例
2018/06/15 Python
pycharm在调试python时执行其他语句的方法
2018/11/29 Python
Python面向对象程序设计之类和对象、实例变量、类变量用法分析
2020/03/23 Python
利用python对excel中一列的时间数据更改格式操作
2020/07/14 Python
css3的transform造成z-index无效解决方案
2014/12/04 HTML / CSS
美国畅销的跑步机品牌:ProForm
2017/02/06 全球购物
高二地理教学反思
2014/01/24 职场文书
上课睡觉检讨书
2014/01/28 职场文书
一年级语文教学反思
2014/02/13 职场文书
党员查摆剖析材料
2014/10/10 职场文书
群众路线教育实践活动心得体会(教师)
2014/10/31 职场文书
学校少先队工作总结
2015/08/12 职场文书
2016教师读书思廉心得体会
2016/01/23 职场文书
MYSQL常用函数介绍
2022/05/05 MySQL
Nginx如何获取自定义请求header头和URL参数详解
2022/07/23 Servers