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

在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提供认证相关接口,如下图

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

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

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

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

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

(0)

相关推荐

  • vue设置全局访问接口API地址操作

    在使用vue框架进行前后端分离项目开发时,通常涉及到与后段接口进行交互,平时一般使用比较多的就是用axios来实现调用后段接口,写法一般为 xxx() { const _this = this axios.get("http://ip:port/xx/xx").then(function (resp) { .....//省略 }) } 但是有一个比较普遍的问题就是,假如我们后端接口地址改变了,或者是网络地址发生了变化,就需要在上面IP以及端口的位置每一处都需要修改,所以我们需要一个一处

  • 使用Vue Composition API写出清晰、可扩展的表单实现

    表单是前端开发中最棘手的部分之一,您可能会在其中发现很多混乱的代码. 基于组件的框架,如 Vue.js,在提高前端代码的可扩展性方面做了很多工作,但是表单的问题仍然存在. 在本教程中,将向您展示新的 Vue Composition API(即将加入 Vue 3 中)如何使表单代码更清晰.更具可扩展性. 为什么表单代码经常很烂 像 Vue 这种基于组件的框架的关键设计模式是组件组合. 这种模式将应用程序的特性抽象为独立的.单一用途的组件,这些组件通信使用 props 和事件的方式. 然而,在此模式

  • 浅谈Vue3.0新版API之composition-api入坑指南

    关于VUE3.0 由于vue3.0语法跟vue2.x的语法几乎是完全兼容的,本文主要介绍了如何使用composition-api,主要分以下几个方面来讲 使用vite体验vue3.0 composition-api解决了什么问题 语法糖介绍 vite的安装使用 vite仓库地址 https://github.com/vuejs/vite 上面有详细的安装使用教程,按照步骤安装即可 composition-api解决了什么问题 使用传统的option配置方法写组件的时候问题,随着业务复杂度越来越高

  • VUE使用axios调用后台API接口的方法

    引言 Vue (读音 /vjuː/,类似于 view) 是一套用于构建用户界面的渐进式JavaScript框架.与其它大型框架不同的是,Vue 被设计为可以自底向上逐层应用.Vue 的核心库只关注视图层,方便与第三方库或既有项目整合.我们都知道VUE更多是注重前段用户界面的渲染合操作,但是如果想到实现前后端之间的交互调用后台API,就需要借助其他组件,如今天要讲到的Axios,下边就重点讲解axios在vue中的使用. Axios,基于 Promise 的 HTTP 客户端,可以工作于浏览器中,

  • vue 更改连接后台的api示例

    vue 更改连接后台的api,是更改在config文件夹下的index.js文件中的proxyTable的值. 如下代码,其中 10.1.166.88:8888/springTimes 为后台暴露出来的appi. dev: { env: require('./dev.env'), port: 8886, autoOpenBrowser: true, assetsSubDirectory: 'static', assetsPublicPath: '/', proxyTable: { '/api':

  • vue 使用外部JS与调用原生API操作示例

    本文实例讲述了vue 使用外部JS与调用原生API操作.分享给大家供大家参考,具体如下: vue 使用外部JS 概要 在开发时我们会经常需要使用到外部的JS,这样我们需要引入外部js,然后进行使用. 实现方法 我们在开发的过程中需要使用到 sha256 将用户的密码进行加密传输. 我们对js进行一点点改造. function sha256_digest(data) { sha256_init(); sha256_update(data, data.length); sha256_final();

  • 浅析 Vue 3.0 的组装式 API(一)

    (一)响应式数据 1. 简单例子 从最简单的数据绑定开始,在 Vue 2.0 中,我们这样将一个数据绑定到模板的指定位置: 在组件创建参数的 data 构造函数中返回一个用来绑定的数据对象,其中有个 now 字段,会被渲染到模板内的 .app > p 内. <template> <div class="app"> <h1>Hello world!</h1> <p>Now is: {{now.toString()}}<

  • 精读《Vue3.0 Function API》

    1. 引言 Vue 3.0 的发布引起了轩然大波,让我们解读下它的 function api RFC详细了解一下 Vue 团队是怎么想的吧! 首先官方回答了几个最受关注的问题: Vue 3.0 是否有 break change,就像 Python 3 / Angular 2 一样? 不,100% 兼容 Vue 2.0,且暂未打算废弃任何 API(未来也不).之前有草案试图这么做,但由于用户反馈太猛,被撤回了. Vue 3.0 的设计盖棺定论了吗? 没有呀,这次精读的稿子就是 RFC(Reques

  • Vue3新特性之在Composition API中使用CSS Modules

    在 Vue 3 Composition API 最近的一次 beta 升级中,无论是 Vue 3 本 3 库 vue-next,还是面向 Vue 2 过渡用的 @vue/composition-api 库中,都同步更新了一个 useCSSModule 函数 -- 用来在使用了 Composition API 的 Vue 实例中,支持 CSS Modules 语法. 首先来看看什么是 CSS Modules: CSS Modules CSS Modules 是一种 CSS 的模块化和组合系统.vu

  • Vue项目中Api的组织和返回数据处理的操作

    项目中的所有Api配置放在一个文件中,便于查找和修改,Api的版本从配置文件(config.js)中读取,采用 apiPrefix + url 的形式组成. 在配置文件中,Api 的配置采用 Http请求方式 url 的方式,默认情况下 GET 可以不写,请求方式统一采用大写形式,动态参数采用 : 占位符 的形式. // services/api.js export default { login: 'POST /login', logout: '/logout', queryUser: '/u

  • Vue.js中Line第三方登录api的实现代码

    国际化的项目就会用用到一些第三方的登录api,这次记录一下Line 的! 按步骤来: 注册Line账号就不说了,虽然麻烦,这就自己去想办法了! demo 请狠狠的戳这里 http://download.lllomh.com/cliect/#/product/J417081951162505 一:开发者平台配置 去Line 的开发者平台 新建一个App: https://developers.line.biz/en/ ​ ​ 顺便写好资料: ​ 动态演示: ​ 这要 用到的 就是2个: Chann

随机推荐