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+iview实现文件上传
Nov 17 Vue.js
vue 通过base64实现图片下载功能
Dec 19 Vue.js
详解Vue的异步更新实现原理
Dec 22 Vue.js
vue实现验证用户名是否可用
Jan 20 Vue.js
Vue实现圆环进度条的示例
Feb 06 Vue.js
详细聊聊vue中组件的props属性
Nov 02 Vue.js
VUE使用draggable实现组件拖拽
Apr 06 Vue.js
vue代码分块和懒加载非必要资源文件
Apr 11 Vue.js
vue 给数组添加新对象并赋值
Apr 20 Vue.js
vue @click.native 绑定原生点击事件
Apr 22 Vue.js
vue-cli3.x配置全局的scss的时候报错问题及解决
Apr 30 Vue.js
Vue全家桶入门基础教程
vue实现可拖拽的dialog弹框
vue如何批量引入组件、注册和使用详解
vue组件的路由高亮问题解决方法
Vue通过懒加载提升页面响应速度
Vue详细的入门笔记
如何理解Vue前后端数据交互与显示
You might like
flash用php连接数据库的代码
2011/04/21 PHP
探讨php中header的用法详解
2013/06/07 PHP
PHP执行Curl时报错提示CURL ERROR: Recv failure: Connection reset by peer的解决方法
2014/06/26 PHP
PHP把数字转成人民币大写的函数分享
2014/06/30 PHP
PHP实现的简单网络硬盘
2015/07/29 PHP
Joomla实现组件中弹出一个模式(modal)窗口的方法
2016/05/04 PHP
php 生成Tab键或逗号分隔的CSV
2016/09/24 PHP
PHP反射机制原理与用法详解
2017/02/15 PHP
js验证表单大全
2006/11/25 Javascript
js中将HTMLCollection/NodeList/伪数组转换成数组的代码
2011/07/31 Javascript
js进行表单验证实例分析
2015/02/10 Javascript
JS中mouseover和mouseout多次触发问题如何解决
2016/06/06 Javascript
js实现动态显示时间效果
2017/03/06 Javascript
详解React-Router中Url参数改变页面不刷新的解决办法
2018/05/08 Javascript
vue3.0 CLI - 2.6 - 组件的复用入门教程
2018/09/14 Javascript
微信小程序实现的3d轮播图效果示例【基于swiper组件】
2018/12/11 Javascript
微信小程序与公众号卡券/会员打通的问题
2019/07/25 Javascript
使用layui的layer组件做弹出层的例子
2019/09/27 Javascript
JS实现点星星消除小游戏
2020/03/24 Javascript
python 示例分享---逻辑推理编程解决八皇后
2014/07/20 Python
Python中的ConfigParser模块使用详解
2015/05/04 Python
用ReactJS和Python的Flask框架编写留言板的代码示例
2015/12/19 Python
python实现求两个字符串的最长公共子串方法
2018/07/20 Python
Python 经典算法100及解析(小结)
2019/09/13 Python
python3操作注册表的方法(Url protocol)
2020/02/05 Python
Amaze UI 文件选择域的示例代码
2020/08/26 HTML / CSS
实习教师个人的自我评价
2013/11/08 职场文书
环保专业大学生职业规划设计
2014/01/10 职场文书
公司总经理工作职责管理办法
2014/02/28 职场文书
求职面试个人自我评价
2014/02/28 职场文书
软件专业毕业生个人自我鉴定
2014/04/17 职场文书
禁烟标语大全
2014/06/11 职场文书
义诊活动通知
2015/04/24 职场文书
巾帼建功标兵先进事迹材料
2016/02/29 职场文书
python获取字符串中的email
2022/03/31 Python
MySQL查询日期时间
2022/05/15 MySQL