Vue 封装Axios

步骤一:Axios配置文件

1.创建Axios实例

2.给实例添加请求拦截器、响应拦截器

3.编写创建Api方法,暴露该创建Api方法

Axios配置文件的内容就是以上三步,其他文章和项目,配置文件都是大同小异,大致都是以上内容。

以下是一整个配置文件的代码:

// 引入Axios
import axios from 'axios'
// 引入qs,不知道的同学请鼠标右键问AI(如果你的浏览器有Ai插件的话)
import qs from 'qs'

// baseUrl 每个人的项目都不同,Vue默认的是'/api',在vueConfig.js文件可以查看。
const baseUrl = '/api'

// 创建一个axios实例
const instance = axios.create({
  baseURL: baseUrl,
  // 超时时间
  timeout: 30000,
  // 转换请求处理
  transformRequest: [
    function (data, headers) {
      // 对 data 进行任意转换处理
      return data
    }
  ],
  // 转换响应处理
  transformResponse: [
    function (data) {
      // 对 data 进行任意转换处理
      return data
    }
  ]
})

// 添加请求拦截器
instance.interceptors.request.use(
  (config) => {
    // 对发送请求的数据作处理
    if (!config.data) {
      config.data = {}
    }
    config.data = qs.stringify(config.data)
    return config
  },
  (error) => {
    // 对请求错误做些什么
    return Promise.reject(error)
  }
)

// 添加响应拦截器
instance.interceptors.response.use(
  (response) => {
    // 对响应数据做点什么
    const resContent = JSON.parse(response.data)
    const { code, msg, data } = resContent
    switch (code) {
      case 0:
        return Promise.reject(msg)
    }
    // eslint-disable-next-line no-empty
    if (code === 1 && msg) {}
    return data
  },
  (error) => {
    // 对响应错误做点什么
    return Promise.reject(error)
  }
)

// 创建Api方法
function createAPI (url, method, data) {
  let config = {}
  if (method === 'post' || method === 'POST') {
    config = {
      method: 'post',
      url,
      data
    }
  } else {
    config = {
      method: 'get',
      url,
      params: data
    }
  }
  return instance(config)
}

// 将创建Api方法暴露出去
export default createAPI

步骤二:分模块的创建Api

  你的项目会有很多模块,例如:登录注册、首页、文章创作、推荐文章列表等等,如果你把所有不同模块的Api都放在一个Js文件中,那以后维护起来,就太过于灾难了,也不规范。

所以我们要把不同模块的Api都放到对应的Js文件中,以后维护起来,就会轻松的找到对应的Api。

例如,把登陆注册的Api就放在login.js文件中,把文章相关的Api就放在article.js中。

如下图:

具体编写Api示例:

// 这是一个Api的Js示例
// 引入我们在上一个步骤中创建的Axios配置文件,暴露出来的创建Api方法
import createAPI from '../config.js'

// 定义该模块的Api
const ARTICLE = {
  // 从左往右依次是:方法名、请求参数、路径、请求方式、请求参数。 一眼就能看明白吧,不用多说,很简单.
  // 初始化文章编辑
  initArticleEdit: (data) => createAPI('/article/initEdit', 'get', data),

  // 新建文章保存
  saveNewArticle: (data) => createAPI('/article/saveArticleCreate', 'post', data)
}
// 暴露该模块Api
export default ARTICLE

步骤三:在index.js中引入各模块的Api

我们要把上一步骤中,分模块编写的Api,引入到一个index.js文件中,方便第四个步骤,挂载到Vue原型上。  

具体文件代码如下:

import LOGIN from './module/login'
import ARTICLE from './module/article'

/**
 * 所有接口引用入口
 */
const apis = {
  ...LOGIN,
  ...ARTICLE
}
export default apis

至此,完整的封装Axios的文件目录如下:

一张干净的不带标注的截图:

步骤四:挂载到Vue原型上

在你Vue项目中的main.js文件中,将封装好的Api挂载到Vue原型上,方便在页面组件中调用。

代码如下:

import Vue from 'vue'
import App from './App.vue'
import router from './router'
import store from './store'
// 因为我封装Axios的文件夹命名是api(上一步骤截图中),所以在这引入是这样写,你的命名是什么就写什么。
import api from '@/api'

Vue.config.productionTip = false
// 挂载到Vue原型上
Vue.prototype.$api = api

new Vue({
  router,
  store,
  render: h => h(App)
}).$mount('#app')

步骤五:在页面中调用

简简单单如截图所示:

这样就可以在页面中,通过this.$api.你的Api名字,来调用了。

最后总结

  没什么好说的,十分基础的东西,介绍给刚学习的同学们。网上还有其他的封装方式,也可以学一学,或许比我这个更简单,更高效,更适用。

有不同意见,欢迎在评论区留言,一起交流探讨,共同进步。

  • 8
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值