springboot+vue 前后端分离项目实战六 vue接口统一管理

news/2024/7/9 23:57:47 标签: vue, springboot

前段时间太忙(还是自己太懒了),好久没写博客了,把最近的博客补上,今天聊聊vue接口的统一管理。
刚开始做vue项目的时候基本上每个vue页面调用的接口都各自写在各自的页面里面,这样就会有重复的代码比如500,404等判断,这些基本的代码都可以抽象出来。
第一步 抽象出来request文件

import axios from 'axios'
import { Message, Loading } from 'element-ui'
let loadinginstace
let baseUrlTemp = location.origin
if (baseUrlTemp.includes('localhost')) {
  baseUrlTemp = '127.0.0.1:9952/api'
}
console.log('页面地址==', baseUrlTemp)
// 创建axios实例
const service = axios.create({
  baseURL: 'http://127.0.0.1:9952/api', // api 的 base_url
  // timeout: 5000, // 请求超时时间
  withCredentials: true
})

// request拦截器
service.interceptors.request.use(
  config => {
    // if (store.getters.token) {
    //   config.headers['X-Token'] = getToken() // 让每个请求携带自定义token 请根据实际情况自行修改
    // }
    loadinginstace = Loading.service({
      fullscreen: true,
      text: 'Loading',
      spinner: 'el-icon-loading',
      background: 'rgba(0,0,0,0.6)'
    })
    return config
  },
  error => {
    // Do something with request error
    console.log(error) // for debug
    Promise.reject(error)
  }
)

// response 拦截器
service.interceptors.response.use(
  response => {
    loadinginstace.close()
    /**
     * code为非200是抛错 可结合自己业务进行修改
     */
    if (response.status === 200) {
      const res = response.data
      if (res.code === '0' || res.code === 0) {
        return response.data
      } else {
        if (res.code === '401' || res.code === 401) {
          location.href = '/login'
        } else {
          res.message &&
            Message({
              message: res.message,
              type: 'error',
              duration: 3 * 1000
            })
          return response.data
        }
      }
    }
  },
  error => {
    loadinginstace.close()
    var message = (error.response && error.response.data.message) || ''
    switch ((error.response && error.response.status) || 302) {
      case 400:
        break
      case 401:
        // message = "登录已超时,请重新登录"
        // if (!window.tipLock) {
        // window.tipLock = true
        // toLogin(error.response.data.loginUrl)
        // }
        location.href = error.response.data.loginUrl
        break
      case 403:
        message = '未授权请求'
        break
      case 404:
        message = '请求的资源不存在'
        break
      case 500:
        message = '服务器内部错误'
        break
      case 302:
        message = '请重新登录'
        // toLogin(error.response.data.loginUrl)
        // location.replace(error.response.data.loginUrl)
        break
    }
    Message({
      message: message || '未知错误',
      type: 'error',
      duration: 3 * 1000
    })
    return Promise.reject(error)
  }
)

export default service

第二步根据业务不同抽象出不同的js,以user为例

import request from '@/utils/request'

// 用户列表接口
export function userList (data) {
  console.log('用户列表传过来的参数' + JSON.stringify(data))
  return request({
    url: `/user/list`,
    method: 'post',
    data
  })
}

// 删除用户
export function deleteUser (param) {
  console.log('删除用户传过来的参数' + JSON.stringify(param))
  return request({
    url: `/user/delete/` + param,
    method: 'delete'
  })
}

export function saveOrUpdate (data) {
  console.log('新增或者更新用户传过来的参数' + JSON.stringify(data))
  return request({
    url: `/user/saveOrUpdate`,
    method: 'post',
    data
  })
}

// 查询用户
export function getUserById (param) {
  console.log('查询用户传过来的参数' + JSON.stringify(param))
  return request({
    url: `/user/` + param,
    method: 'get'
  })
}

第三步,vue里面调用
首先引入js

import {userList, deleteUser, getUserById} from '../../api/user'

然后在method中调用

listAllUser (pageNum) {
      pageNum = pageNum == null ? this.pageNum : pageNum
      console.log('---------' + pageNum)
      var userSearchDTO = {pageNum: pageNum == null ? this.pageNum : pageNum, pageSize: this.pageSize, name: this.input}
      userList(userSearchDTO).then(res => {
        // 注意: 通过 $http 获取到的数据,都在 result.body 中放着
        let { code, data } = res
        if (code === 0) {
          // 成功了
          this.list = data.list
          this.total = data.total
          this.pageSize = data.pageSize
          this.currentPage = data.pageNum
          console.log('用户列表查出来的数据' + JSON.stringify(data))
        }
      })
    },

这样就好了


http://www.niftyadmin.cn/n/1716967.html

相关文章

Java8 新特性 String.join

先看列子: List namesnew ArrayList(); names.add(“1”); names.add(“2”); names.add(“3”); System.out.println(String.join("-", names)); String[] arrStrnew String[]{“a”,“b”,“c”}; System.out.println(String.join("-",…

JDK、JRE、JVM三者之间的关系

JDK、JRE、JVM为包含关系,具体为下图所示:

阿里巴巴 Excel工具easyExcel

今天开发遇到需要导出excel表格的需求&#xff0c;在网上选择了阿里的easyExcel 线上阿里demo里面的代码 /*** 文件下载* <p>* 1. 创建excel对应的实体对象 参照{link DownloadData}* <p>* 2. 设置返回的 参数* <p>* 3. 直接写&#xff0c;这里注意&#xf…

关于C与Java跨平台的理解

C和Java是否可以跨平台编程&#xff0c;答案是肯定的&#xff0c;但语言本身并没有跨平台一说&#xff0c;跨平台的是语言所写的应用程序&#xff0c;可以在不同的操作系统中的运行。那C、Java编程两者的区别又体现在哪里、如何去理解呢&#xff1f; 我们将从跨平台的含义以及C…

Spring Boot 2.0 项目健康检测之actuator

actuator 主要是完成微服务的监控&#xff0c;完成监控治理。可以查看微服务间的数据处理和调用&#xff0c;当它们之间出现了异常&#xff0c;就可以快速定位到出现问题的地方。 maven 项目 在 pom.xml 文件中加入 actuator 的依赖&#xff1a; <dependency><groupI…

Java8之Function接口

Java8 添加了一个新的特性Function&#xff0c;是一个函数式接口 所有标注了FunctionalInterface注解的接口都是函数式接口&#xff0c;具体来说&#xff0c;所有标注了该注解的接口都将能用在lambda表达式上。 先看源码 FunctionalInterface public interface Function<T…

【Java基础知识点+易混淆点(1)】之数据类型与变量

在Java中&#xff0c;main所在的类的名字必须要与文件名一致。在Java中&#xff0c;没有全局变量的说法&#xff0c;所有方法以及变量必须要定义在类中。常量即程序运行期间一直不变的量。在Java中&#xff0c;数据类型主要分为两类&#xff1a;基本数据类型&#xff08;也叫内…

Java8之Predicate接口

Predicate的源码跟Function的很像&#xff0c;我们可以对比这两个来分析下。直接上Predicate的源码&#xff1a; public interface Predicate<T> {/*** Evaluates this predicate on the given argument.*/boolean test(T t);/*** Returns a composed predicate that re…