在现在的前端开发中,前后端分离开发比较主流,所以在封装方法和模块化上也是非常需要掌握的一门技巧。而axios的封装也是非常的多,下面的封装其实跟百度上搜出来的axios封装或者axios二次封装区别不大,主要是补上了拦截器和和简洁一点。

安装axios

  1. npm install axios --save

通过挂载的axios(只是为了对比)

main.js

  1. import Vue from "vue";
  2. import App from "./App.vue";
  3. import router from "./router"; // 路由
  4. import store from "./store"; // Vuex
  5. import axios from "axios";
  6. Vue.config.productionTip = false;
  7. Vue.prototype.$axios = axios;
  8. new Vue({
  9. router,
  10. store,
  11. render: h => h(App)
  12. }).$mount("#app");

页面上使用挂载好的axios

  1. // post
  2. this.$axios.post('products/list', { page: 1, page_size: 10 }).then(res => {
  3. if (res.status == 200) {
  4. this.productsList = res.data;
  5. }
  6. }).catch(err => {
  7. console.log(err);
  8. });

通过封装的axios

还需要安装qs(qs插件可以将字符串解析和序列化字符串)

  1. npm install qs

然后在src下建一个api文件夹,起一个request.js,放入下面代码

  1. import axios from 'axios';
  2. import qs from 'qs';
  3. // 创建axios实例
  4. const service = axios.create({
  5. baseURL: 'http://127.0.0.1/api/', // api的base_url
  6. // withCredentials: true, // 跨域请求时是否发送cookies
  7. timeout: 5000 // 请求超时设置
  8. })
  9. // 请求拦截器
  10. service.interceptors.request.use(config => {
  11. // 请求前做点什么?
  12. if (!config.data) {
  13. config.data = {};
  14. }
  15. // console.log(config)
  16. // 设置公共参数
  17. console.log(qs.stringify(config.data));
  18. return config;
  19. }, error => {
  20. // 处理请求错误
  21. console.log(error); // 用于调试
  22. return Promise.reject(error);
  23. })
  24. // 响应拦截器
  25. service.interceptors.response.use(response => {
  26. // let res = respone.data; // 如果返回的结果是data.data的,嫌麻烦可以用这个,return res
  27. return response;
  28. }, error => {
  29. console.log('error:' + error); // 用于调试
  30. return Promise.reject(error);
  31. })
  32. export default service;

接下来继续在api文件夹下面创建一个index.js文件(如果需要分开的话就不要创建index.js,比如登录接口:login.js,用户接口:user.js...)

  1. import request from '@/api/request'; // 引入封装好的axios
  2. // 登录
  3. export function login (data) {
  4. return request({
  5. url: 'login',
  6. method: 'post',
  7. data: data
  8. })
  9. }
  10. // 产品列表
  11. export function productsList () {
  12. return request({
  13. url: '/products/list',
  14. method: 'get'
  15. })
  16. }

页面上使用封装好的axios

  1. import { Login } from '@/utils/helpers';
  2. import { productsList } from '@/api'; // 默认引入index.js,如果在这个页面有其他的api就以 , 分开:{ productsList, productsPoster }
  3. export default {
  4. data () {
  5. return {
  6. isLoading: true,
  7. productsList: []
  8. }
  9. },
  10. created () {
  11. this.init();
  12. }
  13. methods: {
  14. // 初始化
  15. init () {
  16. if (!Login()) {
  17. alert('请登录');
  18. this.$router.go(-1)
  19. return false;
  20. } else {
  21. this.getProductsList();
  22. this.isLoading = false;
  23. }
  24. },
  25. // 获取产品列表
  26. getProductsList () {
  27. // get
  28. productsList().then(res => {
  29. if (res.status == 200) {
  30. this.productsList = res.data;
  31. }
  32. }).catch(err => {
  33. console.log(err);
  34. });
  35. // post
  36. productsList({ page: 1, page_size: 10 }).then(res => {
  37. if (res.status == 200) {
  38. this.productsList = res.data;
  39. }
  40. }).catch(err => {
  41. console.log(err);
  42. });
  43. }
  44. }
  45. }

以上就是这篇axios封装的所有内容了,看到这里的伙伴们如果有不明白的地方请留言哦,如果写的不好也可以留言吐槽!!!

总结

axios封装的好处在于方便的管理api,我认为这是很好的方式,而且有统一处理的拦截器,如果在每个页面都以

  1. this.$axios.get('/api/login').then(res => {});

的方式,到了需要修改的时候就得需要一个页面一个页面的去找,这样会增加工作量(这个理由又可以摸鱼了())。

【Vue】axios封装,更好的管理api接口和使用的更多相关文章

  1. 【vue】axios二次封装,更好的管理api接口和使用

    在现在的前端开发中,前后端分离开发比较主流,所以在封装方法和模块化上也是非常需要掌握的一门技巧.而axios的封装也是非常的多,下面的封装其实跟百度上搜出来的axios封装或者axios二次封装区别不 ...

  2. 【uni-app】uni.request二次封装,更好的管理api接口和使用

    前言 之前写了一个Vue.js的axios二次封装(点击跳转),这次是uni-app,uni-app是基于vue.js框架的,我觉得是很好用的一个框架,而且一套代码编译那么多平台,非常节省成本,当然, ...

  3. vue axios封装以及API统一管理

    在vue项目中,每次和后台交互的时候,经常用到的就是axios请求数据,它是基于promise的http库,可运行在浏览器端和node.js中.当项目越来越大的时候,接口的请求也会越来越多,怎么去管理 ...

  4. vue(axios)封装,content-type由application/json转换为application/x-www-form-urlencoded

    现在主流的http请求头的content-type有三种(不讨论xml): application/x-www-form-urlencoded  最常见的提交数据方式,与原生form表单数据一致,在c ...

  5. Vue axios封装 实现请求响应拦截

    封装 axios.js import axios from 'axios' import { baseURL } from '@/config' class HttpRequest { constru ...

  6. vue axios 封装(三)

    封装三: import axios from 'axios' import { Message, MessageBox } from 'element-ui' import store from '. ...

  7. 使用ShowDoc在线管理API接口文档

    ShowDoc是什么 每当接手一个他人开发好的模块或者项目,看着那些没有写注释的代码,我们都无比抓狂.文档呢?!文档呢?!Show me the doc !! ShowDoc就是一个非常适合IT团队的 ...

  8. vue Axios 封装与配置项

    import axios from "axios"; import qs from "qs"; import { Message } from "el ...

  9. vue axios 封装(二)

    封装二: http.js import axios from 'axios' import storeHelper from './localstorageHelper' // 全局设置 const ...

随机推荐

  1. linux-设置代理和取消代理

    设置代理: export http_proxy="http://proxy-XXXXX" export https_proxy="https://proxy-XXXXX: ...

  2. jquery遍历数组、对象

    1,for循环: var arr = new Array(13.5,3,4,5,6); for(var i=0;i<arr.length;i++){ arr[i] = arr[i]/2.0; } ...

  3. 「雕爷学编程」Arduino动手做(37)——MQ-3酒精传感器

    37款传感器与模块的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止37种的.鉴于本人手头积累了一些传感器和模块,依照实践出真知(一定要动手做)的理念,以学习和交流为目的,这里 ...

  4. .net core 3.1 使用nlog记录日志 NLog.Web.AspNetCore

    背景 .net core 中已经集成了log的方法, 但是只能控制台输出不能写入文件等等. 常见第三方的的日志工具包括log4net, nlog等等, 本文介绍nlog 一. 引用程序集, nuget ...

  5. React-Redux填坑

    这篇东西以后慢慢补充. Q:今天遇到一个问题是 TypeError:dispatch is not a function A:一直报这个type error,调试了好一阵,最后在tof上看到网友说co ...

  6. BZOJ1066 网络流

    拆点,将一个柱子拆成入点和出点,入点出点之间的容量就是柱子的容量    1066: [SCOI2007]蜥蜴 在一个r行c列的网格地图中有一些高度不同的石柱,一些石柱上站着一些蜥蜴,你的任务是让尽量多 ...

  7. 【c#】Visual Studio 的下载及安装

    “工欲善其事,必先利其器” 这篇博文我们介绍一下如何正确的安装基于c#使用的vs 2017. 1.首先在官网下载Visual Studio,下载地址:https://www.visualstudio. ...

  8. 一次 nginx 返回 302 问题解决

    1.问题描述: 应用服务器通过post方式向nginx服务器发送http请求,返回 302 2.问题解决过程 2.1.查询nginx日志,开始以为302错误会在nginx的错误日志error.log, ...

  9. web.xml——Error:cvc-complex-type.2.4.a: Invalid content was found starting with element

    配置web.xml文件时报错 错误:cvc-complex-type.2.4.a: Invalid content was found starting with element 详细报错信息:cvc ...

  10. JS最通俗易懂简易轮播实现

    轮播图作为前端比较简易的动画,使用非常频繁,这里记录以便使用 此轮播图为最简易自动播放,非无缝,无按钮,无缩略图和序号 想看全套轮播图可以查看我的分类轮播图全套 html 布局 <div sty ...