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 element实现表格合并行数据
Nov 30 Vue.js
Vue+element-ui添加自定义右键菜单的方法示例
Dec 08 Vue.js
vue绑定class的三种方法
Dec 24 Vue.js
vue中父子组件的参数传递和应用示例
Jan 04 Vue.js
vue 递归组件的简单使用示例
Jan 14 Vue.js
vue 实现click同时传入事件对象和自定义参数
Jan 29 Vue.js
vue登录页实现使用cookie记住7天密码功能的方法
Feb 18 Vue.js
vue 动态添加的路由页面刷新时失效的原因及解决方案
Feb 26 Vue.js
Vue实现动态查询规则生成组件
May 27 Vue.js
Vue2.0搭建脚手架
Mar 13 Vue.js
浅谈Vue的computed计算属性
Mar 21 Vue.js
vue+iview实现手机号分段输入框
Mar 25 Vue.js
Vue全家桶入门基础教程
vue实现可拖拽的dialog弹框
vue如何批量引入组件、注册和使用详解
vue组件的路由高亮问题解决方法
Vue通过懒加载提升页面响应速度
Vue详细的入门笔记
如何理解Vue前后端数据交互与显示
You might like
php生成excel列序号代码实例
2013/12/24 PHP
PHP字符串中特殊符号的过滤方法介绍
2014/02/18 PHP
PHP实现json_decode不转义中文的方法
2017/05/20 PHP
jquery 关于event.target使用的几点说明介绍
2013/04/26 Javascript
几种设置表单元素中文本输入框不可编辑的方法总结
2013/11/25 Javascript
js 与 php 通过json数据进行通讯示例
2014/03/26 Javascript
javasctipt如何显示几分钟前、几天前等
2014/04/30 Javascript
JS 作用域与作用域链详解
2015/04/07 Javascript
javascript数组去重方法汇总
2015/04/23 Javascript
简单实现JS对dom操作封装
2015/12/02 Javascript
js滑动提示效果代码分享
2016/03/10 Javascript
iScroll.js 使用方法参考
2016/05/16 Javascript
从零开始实现Vue简单的Toast插件
2018/12/03 Javascript
vue treeselect获取当前选中项的label实例
2020/08/31 Javascript
Vue通过阿里云oss的url连接直接下载文件并修改文件名的方法
2020/12/25 Vue.js
[01:25]DOTA2自定义游戏灵园鬼域等你踏足
2015/10/30 DOTA
[00:37]2016完美“圣”典风云人物:rOtk宣传片
2016/12/09 DOTA
通过实例浅析Python对比C语言的编程思想差异
2015/08/30 Python
Python实现的井字棋(Tic Tac Toe)游戏示例
2018/01/31 Python
pytorch 数据集图片显示方法
2018/07/26 Python
Python爬取qq空间说说的实例代码
2018/08/17 Python
Django 模型类(models.py)的定义详解
2019/07/19 Python
Python装饰器用法与知识点小结
2020/03/09 Python
法国时尚童装网站:Melijoe
2016/08/10 全球购物
英国IT硬件供应商,定制游戏PC:Mesh Computers
2019/03/28 全球购物
给客户的道歉信
2014/01/13 职场文书
学生喝酒检讨书
2014/02/06 职场文书
活动总结怎么写啊
2014/05/07 职场文书
护理专业毕业生自荐信
2014/06/15 职场文书
标准毕业生自荐信
2014/06/24 职场文书
应用外语系自荐信
2014/06/26 职场文书
微笑面对生活演讲稿
2014/09/23 职场文书
文明单位汇报材料
2014/12/24 职场文书
2015年度优秀员工获奖感言
2015/07/31 职场文书
2016年领导干部廉政承诺书
2016/03/24 职场文书
MySQL中int (10) 和 int (11) 的区别
2022/01/22 MySQL