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

安装axios

npm install axios --save

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

main.js

import Vue from "vue";
import App from "./App.vue";
import router from "./router"; // 路由
import store from "./store"; // Vuex
import axios from "axios"; Vue.config.productionTip = false; Vue.prototype.$axios = axios; new Vue({
router,
store,
render: h => h(App)
}).$mount("#app");

页面上使用挂载好的axios

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

通过封装的axios

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

npm install qs

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

import axios from 'axios';
import qs from 'qs'; // 创建axios实例
const service = axios.create({
baseURL: 'http://127.0.0.1/api/', // api的base_url
// withCredentials: true, // 跨域请求时是否发送cookies
timeout: 5000 // 请求超时设置
}) // 请求拦截器
service.interceptors.request.use(config => {
// 请求前做点什么?
if (!config.data) {
config.data = {};
} // console.log(config)
// 设置公共参数
console.log(qs.stringify(config.data)); return config;
}, error => {
// 处理请求错误
console.log(error); // 用于调试
return Promise.reject(error);
}) // 响应拦截器
service.interceptors.response.use(response => {
// let res = respone.data; // 如果返回的结果是data.data的,嫌麻烦可以用这个,return res
return response;
}, error => {
console.log('error:' + error); // 用于调试
return Promise.reject(error);
}) export default service;

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

import request from '@/api/request'; // 引入封装好的axios

// 登录
export function login (data) {
return request({
url: 'login',
method: 'post',
data: data
})
} // 产品列表
export function productsList () {
return request({
url: '/products/list',
method: 'get'
})
}

页面上使用封装好的axios

import { Login } from '@/utils/helpers';
import { productsList } from '@/api'; // 默认引入index.js,如果在这个页面有其他的api就以 , 分开:{ productsList, productsPoster } export default {
data () {
return {
isLoading: true,
productsList: []
}
},
created () {
this.init();
}
methods: { // 初始化
init () {
if (!Login()) {
alert('请登录');
this.$router.go(-1)
return false;
} else {
this.getProductsList();
this.isLoading = false;
}
}, // 获取产品列表
getProductsList () { // get
productsList().then(res => {
if (res.status == 200) {
this.productsList = res.data;
}
}).catch(err => {
console.log(err);
}); // post
productsList({ page: 1, page_size: 10 }).then(res => {
if (res.status == 200) {
this.productsList = res.data;
}
}).catch(err => {
console.log(err);
});
}
}
}

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

总结

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

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. 学习笔记:平衡树-splay

    嗯好的今天我们来谈谈cosplay splay是一种操作,是一种调整二叉排序树的操作,但是它并不会时时刻刻保持一个平衡,因为它会根据每一次操作把需要操作的点旋转到根节点上 所谓二叉排序树,就是满足对树 ...

  2. pt-summary pt-mysql-summary工具

    2个percona的工具还真挺好用的. pt-summary# Percona Toolkit System Summary Report ###################### Date | ...

  3. webpack打包时修改package.json的版本号,并输出相关版本

    可直接修改的方式 { plugins: [ function() { // 修改package.json中的版本号 this.plugin('done', function() { const pkg ...

  4. django安装及其他模块导入

    django安装 python项目第三方模块配置 pip3 list------查看当前pip安装的第三方模块

  5. HDU3117

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3117 题目大意:对于给定的一个数 n ,求斐波那契数F(n).对于超过八位的数,给出首末四位即可. 解 ...

  6. 21-8 数据检索2 top和distinct

    --distinct关键字,根据已经查询出的结果然后去除重复 select distinct * from TblStudent --Top(一般会配合order by一起使用) ---------- ...

  7. css3,transition,animation两种动画实现区别

    我们为页面设置动画时,往往会用到transition还有animation以及transfrom属性或者用到js. 其实通常情况下,对于使用js我们更加倾向于使用css来设置动画. transfrom ...

  8. 12.Java连接Redis_Jedis_常用API

    上一篇总结我们使用我们本地的Eclipse中创建的jedis工程,链接到了我们处于VMware虚拟机上的Linux系统上的Redis服务,我们接下来讲一下jedis的一些常用的API. (1)jedi ...

  9. [C#打包部署教程]002.VS2012 + Dotfuscator

    前言: C#程序界流传着一句古话:"成也Reflector,败也Reflector!" C#编写的代码如果不进行一定程度的混淆和加密,那么是非常容易被反编译进行破解的,特别是对于一 ...

  10. 【转】网页的title左边的小图片怎么添加

    首先,代码中的title标签里是不能加图片的.但是浏览器标提栏前面是可以加一个小图标的. 解决方案:第一步,做一个16 X 16像素的ico格式的图标.具体操作方法是,先在Photoshop中做一个透 ...