当前位置:   article > 正文

axios的二次封装_axios二次封装

axios二次封装

方式一:

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

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

在组件中使用:

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

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

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

方式二:

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

  1. 第一步:创建axios文件夹配置axios
  1. import axios from 'axios'
  2. //elementui按需引入
  3. import { Message } from 'element-ui'
  4. import router from '../router/index'
  5. const newAxios = axios.create({
  6. //开发者环境 测试环境 生产环境
  7. baseURL:'http://47.98.128.191:3000',
  8. timeout:3000,
  9. })
  10. })
  11. export default newAxios
  1. 第二步:创建request文件夹,将请求单独进行封装

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

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

  1. import newAxios from 'axios配置文件地址'
  2. const classes = {
  3.     findAllClasses(){
  4.         return newAxios.get('请求地址')
  5. }
  6. }
  7. export default classes

附:

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

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

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

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

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

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

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

创建文件的示意图:
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Monodyee/article/detail/218973
推荐阅读
相关标签
  

闽ICP备14008679号