axios的二次封装

方式一:

将axios单独分装到某个配置文件中

import axios from 'axios';
const axiosApi = axios.create({
    baseURL:'http://127.0.0.1:3000',
    timeout:3000
})
export default axiosApi

在组件中使用:

import $http from 'axios配置文件的地址'
$http.get('/student/test').then(res=>{
       this.student = res.data
}).catch(e=>{
        console.log(e)
})

在Vue.config.js中配置:这样配置的话,后端就不用在app.use中配置cors模块

const { defineConfig } = require('@vue/cli-service')
module.exports = defineConfig({
  transpileDependencies: true,
  lintOnSave:false,
  devServer:{
    port:8089, //vue项目的端口号
    host:'127.0.0.1', //vue项目运行的ip域名
    https:false, //关闭https的请求
    open:true,
    proxy:{
      '/api':{ //接口地址的前缀
        target:'http://127.0.0.1:8989', //远程服务器的地址和端口号
        changeOrigin:true, //是启动跨域
        secure:false, //设置https请求,若是则配置true。不是则配置false
        logLevel:'debug' //日志的输出级别为debug(即调试信息)
      },
  
    }
  }
})

方式二:

观察方式一的封装,发现方式一的方式还是没有完全的分装,因为在组件中我们依然还要导入aixos的配置文件,还要在组件中写入请求地址,这样子代码依然是耦合的,我们需要解耦,解耦后的代码在以后的维护中更加的方便:

  1. 第一步:创建axios文件夹配置axios
import axios from 'axios'
//elementui按需引入
import { Message } from 'element-ui'
import router from '../router/index'
const newAxios = axios.create({
    //开发者环境 测试环境 生产环境
    baseURL:'http://47.98.128.191:3000',
    timeout:3000,

    })
})
export default newAxios
  1. 第二步:创建request文件夹,将请求单独进行封装

这里文件夹的名字按需求起名

例如我们需要从后台获取班级的数据,所以我们将班级的请求进行单独封装:

import newAxios from 'axios配置文件地址'
const classes = {
    findAllClasses(){
        return newAxios.get('请求地址')
  }
}
export default classes

附:

如果封装到这里的话,在组件中的使用和方式一样,依然没有封装完毕,我们还需要填写请求的地址

  1. 第三步:在request中创建http.js文件:

将刚在缩写的请求文件依次导入到http.js中,这样写的目的是为了后边我们在组件中不用导入配置文件,通过Vue全局的用法this.来使用。

import user from './modules/user'
import student from './modules/student'
import classes from './modules/classes'
import subject from './modules/subject'
export default{
    user,student,classes,subject
}
  1. 第四步:在main.js文件中配置全局的请求
import Vue from 'vue'
import App from './App.vue'
import $http from './request/http'
Vue.prototype.$http = $http
Vue.config.productionTip = false
new Vue({
  render: h => h(App),
}).$mount('#app')

通过在main.js中配置后,在组件我们就可以直接通过,this.$http.请求来直接发请求

  1. 第五步:在组件中的使用:
 async fetchData() {
      const result = await this.$http.student.findAllStudent({
        currentPage:this.currentPage,
        pageSize:this.pageSize,
      });
      console.log(result);
      this.tableData = result.data.rows;
      this.total = result.data.total
    },

因为在请求文件中通过return来返回promise对象,所以这里用语法糖async/await来写请求

创建文件的示意图:
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值