Vue接口封装的完整步骤记录


Posted in Vue.js onMay 14, 2021

首先根据接口写好对应页面的请求

内容如图尽量保证js文件名称与页面文件名称相同(易于查找)

Vue接口封装的完整步骤记录

根据文件目录动态引入/导出接口

提高便捷性

/**
 * 自动引入当前文件夹下所有module
 * require.context(directory, useSubdirectories = false, regExp = /^.//);
 * @param {String} directory 读取文件的路径
 * @param {Boolean} directory 匹配文件的正则表达式
 * @param {regExp} regExp 读取文件的路径
 */
 const modulesFiles = require.context(
    './', // 在当前目录下查找
    false, // 不遍历子文件夹
    /\.js$/ // 正则匹配 以 .js结尾的文件
)
 const modules = modulesFiles.keys().reduce((modules, modulePath) => {
   const moduleName = modulePath.replace(/^.\/(.*)\.js/,'$1')
   const value = modulesFiles(modulePath)
   modules[moduleName] = value.default
   return modules
   }, {})

export default modules

根据项目情况编写拦截/插入内容

import axios from 'axios'
import { MessageBox, Message } from 'element-ui'
import store from '@/store'
import { getToken } from '@/utils/auth'

// create an axios instance
const service = axios.create({
  baseURL: process.env.VUE_APP_BASE_API, // url = base url + request url
  // withCredentials: true, // send cookies when cross-domain requests
  timeout: 5000 // request timeout
})

// request interceptor
service.interceptors.request.use(
  config => {
    // 在发送请求之前做些什么

    if (store.getters.token) {
      // let each request carry token让每个请求携带令牌
      // ['X-Token'] is a custom headers key 是一个自定义标题键
      // please modify it according to the actual situation请根据实际情况修改
      config.headers['X-Token'] = getToken()
    }
    return config
  },
  error => {
    // do something with request error
    console.log(error) // for debug
    return Promise.reject(error)
  }
)

// response interceptor
service.interceptors.response.use(
  /**
   * If you want to get http information such as headers or status如果您想获取http信息,如标头或状态
   * Please return  response => response
  */

  /**
   * Determine the request status by custom code通过自定义代码确定请求状态
   * Here is just an example这里只是一个例子
   * You can also judge the status by HTTP Status Code您还可以通过HTTP状态码来判断状态
   */
  response => {
    const res = response.data
    // console.log(res);
    // 如果自定义代码不是20000,则判断为错误.
    if (res.code !== 200) {
      Message({
        message: res.message || 'Error',
        type: 'error',
        duration: 5 * 1000
      })
      
      // 50008: 非法token; 50012: 其他客户端已登录; 50014: Token 已过期;
      if (res.code === 50008 || res.code === 50012 || res.code === 50014) {
        // to re-login
        MessageBox.confirm('您已注销,可以取消以停留在此页面,或重新登录', '确认注销', {
          confirmButtonText: 'Re-Login',
          cancelButtonText: 'Cancel',
          type: 'warning'
        }).then(() => {
          store.dispatch('user/resetToken').then(() => {
            location.reload()
          })
        })
      }
      return Promise.reject(new Error(res.message || 'Error'))
    } else {
      return res
    }
  },
  error => {
    console.log('err' + error) // for debug
    Message({
      message: error.message,
      type: 'error',
      duration: 5 * 1000
    })
    return Promise.reject(error)
  }
)

export default service

编写env文件

# just a flag
ENV = 'development'

# base api
VUE_APP_BASE_API = 'http://192.168.2.44:5001/v1'

vue继承api

import serve from './api/index'
Vue.prototype.$api = serve;

使用

getAssetsList() {
  this.$api.assets
    .getAssetsList(this.queryInfo.num, this.queryInfo.size)
    .then((res) => {
      this.assetsList = res.data.cards
      this.total = res.data.page.totalCount
    })
    .catch(() => {
      this.$message.error({
        message: "失败",
        duration: 700,
      })
    })
},

总结

到此这篇关于Vue接口封装的文章就介绍到这了,更多相关Vue接口封装内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Vue.js 相关文章推荐
浅析VUE防抖与节流
Nov 24 Vue.js
详解Vue 的异常处理机制
Nov 30 Vue.js
vue表单验证之禁止input输入框输入空格
Dec 03 Vue.js
vue实现两个区域滚动条同步滚动
Dec 13 Vue.js
vue 使用 sortable 实现 el-table 拖拽排序功能
Dec 26 Vue.js
vue中配置scss全局变量的步骤
Dec 28 Vue.js
如何在VUE中使用vue-awesome-swiper
Jan 04 Vue.js
vue中父子组件的参数传递和应用示例
Jan 04 Vue.js
Vuex实现简单购物车
Jan 10 Vue.js
vue3.0 项目搭建和使用流程
Mar 04 Vue.js
Vue elementUI表单嵌套表格并对每行进行校验详解
Feb 18 Vue.js
vue3.0 数字翻牌组件的使用方法详解
Apr 20 Vue.js
Vue全家桶入门基础教程
vue实现可拖拽的dialog弹框
vue如何批量引入组件、注册和使用详解
vue组件的路由高亮问题解决方法
Vue通过懒加载提升页面响应速度
Vue详细的入门笔记
如何理解Vue前后端数据交互与显示
You might like
超强分页类2.0发布,支持自定义风格,默认4种显示模式
2007/01/02 PHP
PHP新建类问题分析及解决思路
2015/11/19 PHP
总结PHP如何获取当前主机、域名、网址、路径、端口和参数等
2016/09/09 PHP
PHP实现的抓取小说网站内容功能示例
2019/06/27 PHP
PHP数据源架构模式之表入口模式实例分析
2020/01/23 PHP
jquery tools系列 expose 学习
2009/09/06 Javascript
javascript 设置文本框中焦点的位置
2009/11/20 Javascript
js 模拟气泡屏保效果代码
2010/07/10 Javascript
javascript实现方法调用与方法触发小结
2016/03/26 Javascript
AngularJS Select(选择框)使用详解
2017/01/18 Javascript
react开发中如何使用require.ensure加载es6风格的组件
2017/05/09 Javascript
VUE多层路由嵌套实现代码
2017/05/15 Javascript
vue与bootstrap实现时间选择器的示例代码
2017/08/26 Javascript
vue中render函数的使用详解
2018/10/12 Javascript
微信小程序合法域名配置方法
2019/05/06 Javascript
在微信小程序中渲染HTML内容3种解决方案及分析与问题解决
2020/01/12 Javascript
JS实现滑动拼图验证功能完整示例
2020/03/29 Javascript
vue项目如何监听localStorage或sessionStorage的变化
2021/01/04 Vue.js
在PyCharm下使用 ipython 交互式编程的方法
2019/01/17 Python
关于python导入模块import与常见的模块详解
2019/08/28 Python
python实现XML解析的方法解析
2019/11/16 Python
Python 实现一个计时器
2020/07/28 Python
css3类选择器之结合元素选择器和多类选择器用法
2017/03/09 HTML / CSS
SOA面试题:如何在SOA中实现松耦合
2013/07/21 面试题
市场营销专业个人求职信范文
2013/12/14 职场文书
创业大赛策划书
2014/03/01 职场文书
诚信贷款承诺书
2014/05/30 职场文书
信息管理专业自荐书
2014/06/05 职场文书
爱护草坪标语
2014/06/24 职场文书
教师群众路线学习心得体会
2014/11/04 职场文书
上课说话检讨书
2015/01/27 职场文书
银行求职信范文
2019/05/13 职场文书
2019年朋友圈经典励志语录50条
2019/07/05 职场文书
拒绝盗图!教你怎么用python给图片加水印
2021/06/04 Python
Java 多线程协作作业之信号同步
2022/05/11 Java/Android
关于MySQL中explain工具的使用
2023/05/08 MySQL