在现在的前端开发中,前后端分离开发比较主流,所以在封装方法和模块化上也是非常需要掌握的一门技巧。而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文件(如果api接口分类需要分开的话就不要创建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 => {});

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

原文链接:https://blog.langting.top/archives/73.html

【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. 原生 Ajax 封装 和 Axios 二次 封装

    AJAX 异步的JavaScript与XML技术( Asynchronous JavaScript and XML ) Ajax 不需要任何浏览器插件,能在不更新整个页面的前提下维护数据,但需要用户允 ...

  4. axios 二次封装

    一般项目往往要对 axios 库进行二次封装,添加一些自定义配置和拦截器等 案例 ./service/axios.js 1234567891011121314151617181920212223242 ...

  5. element el-table表格的vue组件二次封装(附表格高度自适应)

    基于vue的el-table表格二次封装组件方法 前言 在公司实习使用vue+element-ui框架进行前端开发,使用表格el-table较为多,有些业务逻辑比较相似,有些地方使用的重复性高,如果多 ...

  6. 基于SqlSugar的开发框架循序渐进介绍(10)-- 利用axios组件的封装,实现对后端API数据的访问和基类的统一封装处理

    在SqlSugar的开发框架的后端,我们基于Web API的封装了统一的返回结果,使得WebAPI的接口返回值更加简洁,而在前端,我们也需要统一对返回的结果进行解析,并获取和Web API接口对应的数 ...

  7. axios二次封装的几种方法

    一.用Class方法 import axios from "axios"; declare var Promise: any; export class Request { sta ...

  8. axios二次封装

    import axios from "axios" //请求拦截器 axios.interceptors.request.use(function (config) { retur ...

  9. vue+axios请求头封装

    import { mapMutations } from 'vuex' import axios from 'axios' import { Toast } from 'mint-ui'; impor ...

随机推荐

  1. JMeter中BeanShell Sampler

    https://blog.51cto.com/11009785/2385492?source=dra 1.jmeter报错 jmeter.protocol.java.sampler.BeanShell ...

  2. Android_适配器(adapter)之BaseAdapter

    BaseAdapter是应用最多的一种适配了.它是一个抽象类,需要重写方法完成自定义适配器的功能,这就比较自由灵活,能实现各种想要的效果. 之前讲到的SimpleAdapter和ArrayAdapte ...

  3. PreparedStatement实现针对不同表的通用查询操作

    PreparedStatement实现针对不同表的通用查询操作:查询一样和多行 PreparedStatementQueryTest package com.aff.PreparedStatement ...

  4. 线程的同步机制:同步代码块&同步方法

    解决存在的线程安全问题:打印车票时出现重票,错票 使用同步代码块的解决方案 TestWindow2 package com.aff.thread; /* 使用实现Runnable接口的方式,售票 存在 ...

  5. Linux光盘yum源软件安装

    关于Linux中的软件安装,有三种方法,个人认为比较方便的就是yum安装,有网的话比较简单,暂且不提.本文主要记录在没有外网的情况下,如何以本地光盘搭建yum源来实现yum安装. 主要包括以下几步: ...

  6. 【JVM】关于OOM的二三事

    组织架构 严格来说,StackOverflowError和OutOfMemoryError都属于错误,而不是异常. java.lang.StackOverflowError public class ...

  7. Redis 入门到分布式 (五) Redis持久化的取舍和选择

    个人博客网:https://wushaopei.github.io/    (你想要这里多有) Redis持久化的取舍和选择 持久化的作用 RDB AOF RDB和AOF的选择 一.持久化的作用   ...

  8. (Java实现) 洛谷 P1553 数字反转(升级版)

    题目描述 给定一个数,请将该数各个位上数字反转得到一个新数. 这次与NOIp2011普及组第一题不同的是:这个数可以是小数,分数,百分数,整数.整数反转是将所有数位对调:小数反转是把整数部分的数反转, ...

  9. Java实现 LeetCode 744 寻找比目标字母大的最小字母(二分法)

    744. 寻找比目标字母大的最小字母 给定一个只包含小写字母的有序数组letters 和一个目标字母 target,寻找有序数组里面比目标字母大的最小字母. 在比较时,数组里字母的是循环有序的.举个例 ...

  10. Java实现 LeetCode 391 完美矩形

    391. 完美矩形 我们有 N 个与坐标轴对齐的矩形, 其中 N > 0, 判断它们是否能精确地覆盖一个矩形区域. 每个矩形用左下角的点和右上角的点的坐标来表示.例如, 一个单位正方形可以表示为 ...