目录

  • 前言
  • 一、计划一下
  • 二、基础层
  • 三、接口层
  • 使用封装的axios请求
  • 总结

前言

这几天有计划把博客里的axios封装一下, 本来是直接做的请求, 看着实在有点乱;
顺便复健一下axios抽离, 快给忘干净了;


一、计划一下

分两层来封, 基础层主要针对bseURL封装, 接口层针对每个接口进行封装;

如下图

二、基础层

确保后端更改baseURL时, 前端更方便安全的配合;
首先对于每个baseURL建立一组实例, 组内包括基于这个域名以各种method进行请求的实例;
我这里只用了一个域名和get/post两种请求方法, 所以我只需要根据请求方法创建两个实例分别负责post和get请求.
如此不需要在页面传入timeout, method以及baseURL;

//request.js
import axios from 'axios'
const baseURL = 'http://localhost:3000/'export const postService = axios.create({  //baseURL的post请求经由此baseURL: baseURL,timeout: 5000,method: 'post',
})export const getService = axios.create({   //baseURL的get请求经由此baseURL: baseURL,timeout: 5000,method: 'get',
})

三、接口层

每到一个页面都要做一次请求, 如果每个页面都传一次url就会有点糟糕了, 所以根据接口url再度封装.
确保前端在请求同一接口时不需要重复传入某一参数, 在我这里, 这个需要重复传入的参数只有url.
确保在后端仅更改接口url时, 前端能够更方便安全的配合;
如此不需要在页面传入url;

这里我多做了一步, 把每个页面的请求单独分了js文件, 所以这里是login.js, 放在一起也是一样的.

//login.js
import { postService, getService } from "./Service"export const postData = (data) => {  //后端从body里拿值是这样写的return postService({url: '/getComments',data})
}export const getData = () => {  //不用发数据的请求return getService({url: '/getHottest',})
}export const doLogin = (userData, elses) => {  //body和query都要传参的写法return postService({url: '/doLogin',userData,params: {elses}})
}

使用封装的axios请求

引入封装的最彻底的那层的方法, 这里也就是直接引入接口层的方法;

<button @click="getHottestArticle">getHottest</button>
<button @click="getComments">getComments</button>
<button @click="login">login</button>
//<script setup>
import { inject } from "vue";
const axios = inject("axios");
import { getData, postData, doLogin } from "./login.js";const getHottestArticle = () => {getData().then((res) => {console.log(res);});
}const getComments = () => {postData({ article_id: 1 }).then((res) => {console.log(res);});
}const login() => {doLogin({ username: "xxx", password: xxx }).then((res) => {console.log(res);});
}//</script>

总结

最近开始顺带着学Blender, 只是当个爱好吧.
说不定以后会记录一些Blender相关的技术…?

如果这篇文章帮到你, 我很荣幸.

Vue3 抽离封装axios相关推荐

  1. Vue3+TypeScript 项目封装axios

    Vue3+TypeScript 项目封装axios VUE CLI 中代码目录解构 config.js let BASE_URL = '' const TIME_OUT = 10000 //区分环境不 ...

  2. vue3+vite+ts 封装axios踩坑记录

    注意注意注意!!踩坑记录非教程示例,别跟着我进坑里,太胖我可能捞不起来(ÒωÓױ). 安装axios:npm install axios src文件夹下创建api和utils文件夹,utils里创建r ...

  3. 【收藏】vue3+vite+ts 封装axios踩坑记录

    https://blog.csdn.net/M1512415/article/details/115378752

  4. 使用TS+vue3封装axios时编译报错,提示You may need an additional loader to handle the result of these loaders.

    基于vue3+TS构建的商城后台管理系统 根据coderwhy老师指导搭建的项目为PC端商品后台管理系统. 报错: 使用TS+vue3封装axios时编译报错,提示You may need an ad ...

  5. vite + vue3 + 封装axios + 封装loading + 封装返回顶部

    前言 ​前期回顾    ​ vite + vue3 + ts配置<企业级项目>二次封装el-table.分页_0.活在风浪里的博客-CSDN博客封装的功能有哪些?分页.表格排序.文字居中. ...

  6. vue3(vite)设置代理,封装axios,api解耦

    一.设置代理 打开根目录下的vite.config.js文件,设置代理 import { defineConfig } from 'vite' import vue from '@vitejs/plu ...

  7. 在项目中用ts封装axios

    写在前面 虽然说Fetch API已经使用率已经非常的高了,但是在一些老的浏览器还是不支持的,而且axios仍然每周都保持2000多万的下载量,这就说明了axios仍然存在不可撼动的地位,接下来我们就 ...

  8. 封装axios加载动画Loding——vuex+axios拦截器

    封装axios加载动画Loding--vuex+axios拦截器 前言:我们在axios发送请求时候,会存在请求等待时长,我们一般会加一个动画,如果很多个时候一个一个的加动画代码看起来很臃肿很冗余,我 ...

  9. 在vue项目中:统一封装 Axios 接口与异常处理

    在vue项目中:统一封装 Axios 接口与异常处理 参考文章: (1)在vue项目中:统一封装 Axios 接口与异常处理 (2)https://www.cnblogs.com/itgezhu/p/ ...

  10. axios队列 vue_(十三 )Vue 封装axios(四种请求)及相关介绍

    Vue 封装axios(四种请求)及相关介绍 首先axios是基于promise的http库 promise是什么? 1.主要用于异步计算 2.可以将异步操作队列化,按照期望的顺序执行,返回符合预期的 ...

最新文章

  1. 石正丽/周鹏团队发表冠状病毒新研究,进一步证明新冠非实验室泄漏
  2. 打印session cookie
  3. 十大python开发软件-7款公认比较出色的Python IDE,你值得拥有!
  4. OpenCV级联分类器Cascade Classifier
  5. activex控件有什么用_你知道怎样用Excel打印「条形码」吗?
  6. C提高_day03_两个辅助指针变量挖字符串(强化4)
  7. css animation动画
  8. A5营销:传统企业站优化正文内容在SEO方面的三大注意事项
  9. java 多个方法_java中的多个main()方法
  10. C#LeetCode刷题之#448-找到所有数组中消失的数字(Find All Numbers Disappeared in an Array)
  11. android gettext方法,方法getText()必须从UI线程(Android Studio)调用
  12. 经验分享 PDF如何旋转页面,替换页面
  13. matlab中关闭mexfunction,mex文件的运行时Matlab自动关闭
  14. 玉柴spn码故障对照表_故障代码一览表
  15. Java性能优化(详解)
  16. Vue2.js:v-click-outside自定义指令和vue-click-outside监听鼠标点击元素外部区域事件
  17. Linux TCP/IP大合集
  18. 【uniapp小程序】路由跳转navigator传参封装
  19. 如何删除顽固的 AVI 格式的影音文件
  20. App Store Connect显示app已经上架(可供销售),但在App Store中没有实时更新

热门文章

  1. 工作中 pyspark的小知识点
  2. 《Java编程思想第五章》:初始化与内存
  3. NVIDIA详细解读游戏中DX9与DX11差别
  4. 你还记得大明湖畔的oop原则吗?
  5. 中国少数民族语言和文字
  6. 七战DTCC铸成ACE Director 去哪儿网周彦伟畅聊数据库的十八般武艺
  7. 三星s20 android 10.0,三星S20猎户CPU系列安卓10.0 TWRP Recovery V3.4.0.10
  8. 基于C#的网站地图制作
  9. ASP.NET动态网站开发培训-39.互动论坛制作(七、制作回复留言页面)
  10. 我的世界java凋零_我的世界:玩家还原Java版已“消失”的三个结构,造型让人难忘?...