vue项目接口管理,所有接口都在apis文件夹中统一管理操作


Posted in Javascript onAugust 13, 2020

在vue开发中,会涉及到很多接口的处理,当项目足够大时,就需要定义规范统一的接口,如何定义呢?

方法可能不只一种,本文使用axios+async/await进行接口的统一管理

本文使用vue-cli生成的项目举例

使用接口管理之前

在项目的某个具体组件中调接口,把调用接口的方法直接写在mounted中,或在是methods中 比如:

xxx.vue

<template>
  <div id="areaTree">
   <!-- 标题 -->
   <div class="leftTree_Title">
    <el-row>    
     <el-col :span="24">{{msg}}</el-col>
    </el-row>
   </div>
  </div>
</template>

<script>
import axios from 'axios'

export default { 
  name: "test",
  data:function(){ 
    return{ 
      msg:'站点选择',
    }
  },
  methods:{ 
  },
  computed:{
  },
  //--------------Vue生命周期---具体细节参考:https://www.cnblogs.com/yingyigongzi/p/10844175.html ---------------
  beforeCreate(){
  },
    
  created(){ 
  },
  beforeMount(){
  },
  mounted(){  //理解成初始化,该操作只会执行一次 
    axios.get('/GetTreeListForSoilByRegion',{  //从接口读取数据
    params: {
     //参数
    } 
   })
   .then(function (response) {


//代码操作
   })
   .catch(function (error) {
    console.log(error);
   });
  },
  beforeUpdate(){
  },
  updated(){
  }, 
  beforeDestroy(){
  },
  destroyed(){
  },
  //--------------Vue生命周期---具体细节参考:https://www.cnblogs.com/yingyigongzi/p/10844175.html ---------------
} 
</script>

<style scoped></style>

使用项目管理之后,可以做到接口一次定义,到处使用,

代码看起来规范,所有的接口都在一个文件夹定义,不用分散的各个组件,维护起来简单,例如后台的一些url变了,改起来也方便

步骤:

1.首先,在src目录下新建一个文件夹,我这里叫apis,后台提供的所有接口都在这里定义

2.在apis下新建一个js文件,叫http.js,在里面做axios相应的配置,目的 封装axios,完整代码如下,可以直接使用

http.js

import axios from 'axios'
 
//创建axios的一个实例
var instance = axios.create({
  baseURL:'',
  timeout: 6000
})
 
 
//------------------- 一、请求拦截器 忽略
instance.interceptors.request.use(function (config) {
 
  return config;
}, function (error) {
  // 对请求错误做些什么
   
  return Promise.reject(error);
});
 
//----------------- 二、响应拦截器 忽略
instance.interceptors.response.use(function (response) {
   
  return response.data;
}, function (error) {
  // 对响应错误做点什么
  console.log('拦截器报错');
  return Promise.reject(error);
});
 
/**
 * 使用es6的export default导出了一个函数,导出的函数代替axios去帮我们请求数据,
 * 函数的参数及返回值如下:
 * @param {String} method 请求的方法:get、post、delete、put
 * @param {String} url   请求的url:
 * @param {Object} data  请求的参数
 * @returns {Promise}   返回一个promise对象,其实就相当于axios请求数据的返回值
 */
export default function (method, url, data = null) {
  method = method.toLowerCase();
  if (method == 'post') {
    return instance.post(url, data)
  } else if (method == 'get') {
    return instance.get(url, { params: data })
  } else if (method == 'delete') {
    return instance.delete(url, { params: data })
  }else if(method == 'put'){
    return instance.put(url,data)
  }else{
    console.error('未知的method'+method)
    return false
  }
}

3.按照后台文档划分的模块新建js文件,这里简单举个例子

我要去拿树结构的数据,到时候处理完数据在页面上显示出来,操作如下:

a.新建一个navigationTree.js,这里专门用来管理 我的树组件(即上文的xxx.vue)的接口,(如果还有别的组件,比如aa.vue也要用到接口,可以在api文件夹内再创一个aa.js,管理aa.vue的接口)

navigationTree.js

//navigationTree.js 用于获取导航树的树形json数据

import req from './http.js'  //引入封装好的axios

//在这里定义了一个登陆的接口,把登陆的接口暴露出去给组件使用
export const GETTREEDATA =params=>req('get','/GetTreeListForSoilByRegion',params)
//这里使用了箭头函数,转换一下写法:
//export const GETTREEDATA=function(req){
//  return req('post','/GetTreeListForSoilByRegion',params)
//}

4.在组件中使用接口,来看看现在的xxx.vue

<template>
  <div id="areaTree"><br>    
  <!-- 标题 --><br>    
  <div class="leftTree_Title"><br>    
  <el-row> <br>      
  <el-col :span="24">{{msg}}</el-col> <br>    
  </el-row> <br>    
  </div> <br>  
  </div>
</template>
 
<script>
 
//1. 引入获取树结构的接口定义
import {GETTREEDATA} from '../apis/navigationTree.js'
 
let treeTemp =[];
export default {
  name: "zTree",
  data:function(){
    return{
      msg:'站点选择',
    }
  },
  methods:{
  },
  computed:{
  },

  beforeCreate(){
  },
  created(){   
  },
  beforeMount(){
  },
  mounted(){  //理解成初始化,该操作只会执行一次
 
    let testdata = GETTREEDATA();  //vue项目接口管理,所有接口都在apis文件夹中统一管理
    testdata
    .then(function(response){
     //console.log(response);
 
    }).catch(function(error){
      console.log(error);
    });
 
  },
  beforeUpdate(){
  },
  updated(){
  },
  beforeDestroy(){ 
  },
  destroyed(){
  },

}
</script>
 
<style scoped>
</style>

核心部分mounted 这块

补充知识:vue项目api接口组织方式

一般后端接口是,一个业务的方法,用一个controller,所以前端这边,一个业务的接口放到一个js文件里

shiroApi提供认证相关接口,如下图

vue项目接口管理,所有接口都在apis文件夹中统一管理操作

adminApi提供组织,用户,角色管理等相关接口,如下图

vue项目接口管理,所有接口都在apis文件夹中统一管理操作

将shiroApi和adminApi等等api做个汇总,到apis.js中,如下图

vue项目接口管理,所有接口都在apis文件夹中统一管理操作

登陆接口调用例子,引入apis.js即可(当然也可以引入具体shiroApi.js,看自己需要和习惯),如下图:

vue项目接口管理,所有接口都在apis文件夹中统一管理操作

个人总结的api组织方式,欢迎提供更好的建议

以上这篇vue项目接口管理,所有接口都在apis文件夹中统一管理操作就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
javascript多种数据类型表格排序代码分析
Sep 11 Javascript
JQuery中SetTimeOut传参问题探讨
May 10 Javascript
解决JQeury显示内容没有边距内容紧挨着浏览器边线
Dec 20 Javascript
js中style.display=&quot;&quot;无效的解决方法
Oct 30 Javascript
跟我学习javascript的this关键字
May 28 Javascript
微信小程序 实战实例开发流程详细介绍
Jan 05 Javascript
js模态对话框使用方法详解
Feb 16 Javascript
使用jQuery ajaxupload插件实现无刷新上传文件
Apr 23 jQuery
vue与TypeScript集成配置最简教程(推荐)
Oct 17 Javascript
JS Generator 函数的含义与用法实例总结
Apr 08 Javascript
详解JavaScript作用域 闭包
Jul 29 Javascript
JS实现可以用键盘方向键控制的动画
Dec 11 Javascript
vue实现把接口单独存放在一个文件方式
Aug 13 #Javascript
js实现幻灯片轮播图
Aug 14 #Javascript
查找Vue中下标的操作(some和findindex)
Aug 12 #Javascript
修改Vue打包后的默认文件名操作
Aug 12 #Javascript
解决vue单页面应用进入页面加载所有 js 的问题
Aug 12 #Javascript
vue设置默认首页的操作
Aug 12 #Javascript
vue-cli打包后本地运行dist文件中的index.html操作
Aug 12 #Javascript
You might like
通俗易懂的php防注入代码
2010/04/07 PHP
PHP采集利器 Snoopy 试用心得
2011/07/03 PHP
php实现设计模式中的单例模式详解
2014/10/11 PHP
php根据一个给定范围和步进生成数组的方法
2015/06/19 PHP
PHP实现获取文件后缀名的几种常用方法
2015/08/08 PHP
PHP输出多个元素的排列或组合的方法
2017/03/14 PHP
php 使用curl模拟ip和来源进行访问的实现方法
2017/05/02 PHP
如何修改yii2.0自带的user表为其它的表
2017/08/01 PHP
PHP memcache在微信公众平台的应用方法示例
2017/09/13 PHP
Javascript 构造函数,公有,私有特权和静态成员定义方法
2009/11/30 Javascript
Jquery实现自定义tooltip示例代码
2014/02/12 Javascript
jQuery EasyUI 菜单与按钮之创建简单的菜单和链接按钮
2015/11/18 Javascript
Javascript实现通过选择周数显示开始日和结束日的实现代码
2016/05/30 Javascript
JS版微信6.0分享接口用法分析
2016/10/13 Javascript
vue-cli中打包图片路径错误的解决方法
2017/10/26 Javascript
html中通过JS获取JSON数据并加载的方法
2017/11/30 Javascript
原生JS写Ajax的请求函数功能
2017/12/22 Javascript
微信头像地址失效踩坑记附带解决方案
2019/09/23 Javascript
Python实现删除当前目录下除当前脚本以外的文件和文件夹实例
2015/07/27 Python
python字典键值对的添加和遍历方法
2016/09/11 Python
Python列表list操作符实例分析【标准类型操作符、切片、连接字符、列表解析、重复操作等】
2017/07/24 Python
Python实现按学生年龄排序的实际问题详解
2017/08/29 Python
使用Python控制摄像头拍照并发邮件
2019/04/23 Python
使用Python Pandas处理亿级数据的方法
2019/06/24 Python
解决python DataFrame 打印结果不换行问题
2020/04/09 Python
python3用PyPDF2解析pdf文件,用正则匹配数据方式
2020/05/12 Python
详解如何用canvas画一个微笑的表情
2019/03/14 HTML / CSS
DHC中国官方购物网站:日本通信销售No.1化妆品
2016/08/20 全球购物
印尼最大的在线购物网站:MatahariMall.com
2016/08/26 全球购物
中兴通讯全球官方网站:ZTE
2020/12/26 全球购物
电气专业应届生求职信
2013/11/01 职场文书
优秀演讲稿范文
2013/12/29 职场文书
兴趣小组活动总结
2014/05/05 职场文书
淘宝活动总结范文
2014/06/26 职场文书
2014年教师节讲话稿5篇
2014/09/10 职场文书
入党介绍人意见怎么写
2015/06/03 职场文书