当前位置: 首页 > news >正文

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。不是则配置falselogLevel:'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来写请求

创建文件的示意图:

http://www.lryc.cn/news/25884.html

相关文章:

  • GET与POST区别(最详细)
  • 精选博客系列|将基于决策树的Ensemble方法用于边缘计算
  • JS混淆加密:Eval的未公开用法
  • π型滤波器 计算_π型滤波电路
  • 大数据常见术语
  • 带你了解“函数递归”
  • 网络资源面经2
  • 4年经验来面试20K的测试岗,一问三不知,我还真不如去招应届生。
  • K8S搭建NACOS集群踩坑问题
  • 怎么避免计算机SCI论文的重复率过高? - 易智编译EaseEditing
  • uni-app路由拦截
  • 如何使用固态继电器实现更高可靠性的隔离和更小的解决方案尺寸
  • 【YOLOv8/YOLOv7/YOLOv5系列算法改进NO.56】引入Contextual Transformer模块(sci期刊创新点之一)
  • 深圳大学计软《面向对象的程序设计》实验3 指针2
  • 【基于机器学习的推荐系统项目实战-2】项目介绍与技术选型
  • 对称锥规划:锥与对称锥
  • 4.基于Label studio的训练数据标注指南:情感分析任务观点词抽取、属性抽取
  • 算法拾遗二十五之暴力递归到动态规划五
  • Linux进程的创建结束类系统调用总结
  • Git分支的合并策略有哪些?Merge和Rebase有什么区别?关于Merge和Rebase的使用建议
  • 2022-2-23作业
  • 1.基于Label studio的训练数据标注指南:信息抽取(实体关系抽取)、文本分类等
  • “高退货率”标签引热议,亚马逊跨境电商是好是坏?
  • Pinia2
  • 服务器配置 | 在Windows本地打开服务器端Tensorboard结果
  • 13 nuxt3学习(新建页面 内置组件 assets 路由)
  • Linus命令记录(持续编辑版)
  • 玩转ThreadLocal
  • 亚马逊二审来袭,跨境电商传统验证算法真的靠谱吗?
  • 微信小程序|基于小程序+云开发制作一个租房小程序