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 相关文章推荐
增强的 JavaScript 的 trim 函数的代码
Aug 13 Javascript
JavaScript去掉空格的方法集合
Dec 28 Javascript
in.js 一个轻量级的JavaScript颗粒化模块加载和依赖关系管理解决方案
Jul 26 Javascript
iphone safari不支持position fixed的解决方法
May 04 Javascript
js左侧三级菜单导航实例代码
Sep 13 Javascript
Jquery解析Json格式数据过程代码
Oct 17 Javascript
Document.body.scrollTop的值总为零的快速解决办法
Jun 09 Javascript
用jquery的attr方法实现图片切换效果
Feb 05 Javascript
angular.extend方法的具体使用
Sep 14 Javascript
JavaScript数据结构之优先队列与循环队列实例详解
Oct 27 Javascript
JavaScript创建对象方法实例小结
Sep 03 Javascript
详解ES6中的 Set Map 数据结构学习总结
Nov 06 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完全过滤HTML,JS,CSS等标签
2009/01/16 PHP
PHP获取url的函数代码
2011/08/02 PHP
php流量统计功能的实现代码
2012/09/29 PHP
浅析Yii中使用RBAC的完全指南(用户角色权限控制)
2013/06/20 PHP
php分页示例分享
2014/04/30 PHP
PHP实现的文件操作类及文件下载功能示例
2016/12/24 PHP
Laravel 5.4向IoC容器中添加自定义类的方法示例
2017/08/15 PHP
javaScript中with函数用法实例分析
2015/06/08 Javascript
javascript图片切换综合实例(循环切换、顺序切换)
2016/01/13 Javascript
JavaScript 轮播图和自定义滚动条配合鼠标滚轮分享代码贴
2016/10/28 Javascript
AngularJS基于ui-route实现深层路由的方法【路由嵌套】
2016/12/14 Javascript
JavaScript实现短暂提示框功能
2018/04/04 Javascript
Vue中父子组件通讯之todolist组件功能开发
2018/05/21 Javascript
react-native使用leanclound消息推送的方法
2018/08/06 Javascript
Vue.js中provide/inject实现响应式数据更新的方法示例
2019/10/16 Javascript
Vue数据双向绑定原理实例解析
2020/05/15 Javascript
linux下安装easy_install的方法
2013/02/10 Python
python抓取网页中的图片示例
2014/02/28 Python
python 环境变量和import模块导入方法(详解)
2017/07/11 Python
python学习之matplotlib绘制散点图实例
2017/12/09 Python
python语音识别实践之百度语音API
2018/08/30 Python
linux环境中没有网络怎么下载python
2019/07/07 Python
基于Python3.7.1无法导入Numpy的解决方式
2020/03/09 Python
使用Python将图片转正方形的两种方法实例代码详解
2020/04/29 Python
Django 实现图片上传和下载功能
2020/12/31 Python
宝塔面板出现“open_basedir restriction in effect. ”的解决方法
2021/03/14 PHP
Shein英国:女性时尚网上商店
2019/04/10 全球购物
新闻学专业应届生求职信
2013/11/08 职场文书
运动会通讯稿400字
2014/01/28 职场文书
室内设计专业毕业生求职信
2014/05/02 职场文书
高中课前三分钟演讲稿
2014/09/13 职场文书
优秀党员主要事迹范文
2015/11/05 职场文书
小学作文之描写天气
2019/08/15 职场文书
互联网创业商业模式以及赚钱法则有哪些?
2019/10/12 职场文书
Python Pandas数据分析之iloc和loc的用法详解
2021/11/11 Python
PostgreSQL聚合函数介绍以及分组和排序
2022/04/12 PostgreSQL