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 Array扩展实现代码
Oct 14 Javascript
js 操作select和option常用代码整理
Dec 13 Javascript
jQuery中ajax的使用与缓存问题的解决方法
Dec 19 Javascript
jQuery性能优化的38个建议
Mar 04 Javascript
angularjs学习笔记之完整的项目结构
Sep 26 Javascript
原生js实现百叶窗效果及原理介绍
Apr 12 Javascript
Bootstrap CSS组件之导航(nav)
Dec 17 Javascript
Bootstrap模态框插入视频的实现代码
Jun 25 Javascript
node.js中http模块和url模块的简单介绍
Oct 06 Javascript
使用puppeteer破解极验的滑动验证码
Feb 24 Javascript
JS匿名函数和匿名自执行函数概念与用法分析
Mar 16 Javascript
JavaScript获取时区实现过程解析
Sep 24 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制作简单模版引擎
2016/04/07 PHP
PHP随机数 C扩展随机数
2016/05/04 PHP
PHP编程实现多维数组按照某个键值排序的方法小结【2种方法】
2017/04/27 PHP
PHP耦合设计模式实例分析
2018/08/08 PHP
PHP基于ip2long实现IP转换整形
2020/12/11 PHP
得到文本框选中的文字,动态插入文字的js代码
2007/03/07 Javascript
javascript 精粹笔记
2010/05/09 Javascript
对setInterval在火狐和chrome切换标签产生奇怪的效果之探索,与解决方案!
2011/10/29 Javascript
javascript中常用编程知识
2013/04/08 Javascript
JavaScript操作DOM元素的childNodes和children区别
2015/04/01 Javascript
为什么JS中eval处理JSON数据要加括号
2015/04/13 Javascript
jQuery实现点击小图显示大图代码分享
2015/08/25 Javascript
JS响应鼠标点击实现两个滑块区间拖动效果
2015/10/26 Javascript
基于javascript显示当前时间以及倒计时功能
2016/03/18 Javascript
Javascript基础_嵌入图像的简单实现
2016/06/14 Javascript
最常见和最有用的字符串相关的方法详解
2017/02/06 Javascript
js中字符型和数值型数字的互相转化方法(必看)
2017/04/25 Javascript
详解JS中的attribute属性
2017/04/25 Javascript
JS拖动选择table里的单元格完整实例【基于jQuery】
2019/05/28 jQuery
Vue事件处理原理及过程详解
2020/03/11 Javascript
DJANGO-ALLAUTH社交用户系统的安装配置
2014/11/18 Python
python实现下载指定网址所有图片的方法
2015/08/08 Python
python实现折半查找和归并排序算法
2017/04/14 Python
python 消费 kafka 数据教程
2019/12/21 Python
Python转换字典成为对象,可以用&quot;.&quot;方式访问对象属性实例
2020/05/11 Python
Python参数传递实现过程及原理详解
2020/05/14 Python
时尚孕妇装:HATCH Collection
2019/09/24 全球购物
父亲八十大寿答谢词
2014/01/23 职场文书
导师评语大全
2014/04/26 职场文书
志愿者活动总结报告
2014/06/27 职场文书
2015年安全生产目标责任书
2015/01/29 职场文书
幼儿园大班开学寄语(2016秋季)
2015/12/03 职场文书
小学英语课教学反思
2016/02/15 职场文书
Django中session进行权限管理的使用
2021/07/09 Python
Redis模仿手机验证码发送的实现示例
2021/11/02 Redis
Python中with上下文管理协议的作用及用法
2022/03/18 Python