axios介绍:

axios是近几年比较火的一个前端库,完美代替了jquery中的ajax,它不仅可以运行在浏览器也可以运行在nodejs环境下,而且支持Promise API 可以拦截请求,和返回.而且天生防XSRF

为什么需要封装:

有时候我们需要对服务端的状态统一处理,假如服务端返回状态码为300 我们需要重定向到登录页,这时我们就可以封装一下axios的api 使其统一处理我们的300状态码, 简单来说封装是为了让程序更加简洁,易于修改.减少重复性工作.

封装的好处及目的:

可以统一处理错误

可以统一处理状态码

使其调用更加简单

可以更加符合项目需要

封装的准备工作,重点,难点:

需要和后台开发人员约定状态码

需要确定项目的请求过期时间

回话保存机制,session,cookie token

需要哪些请求方式

需要什么格式,json, formdata,或url拼接参数

这里需要注意一下axios的一些api的参数

当method为get时 参数是params

当method为post时 参数是data

withCredentials 参数为true是支持跨域验证

另外可以取消一个已经发起的xhr请求

另外当封装axios时,我们可能要引入其他的第三方库,比如弹窗插件,vuex,还有router的跳转.

完整代码:

放一个我们项目中用的axios封装


import router from '../router'
import axios from 'axios'import config from './config'// axios默认配置请求的api基础地址
axios.defaults.baseURL = (process.env.NODE_ENV !== 'production' ? config.dev.httpUrl : config.build.httpUrl)
// axios.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded'
axios.defaults.timeout = 30000 // 超时设置30s
export default ((url = '', data = {}) => {return {get (url, data) {return new Promise((resolve, reject) => {axios.get(url, {withCredentials: false,params: data}).then(function (response) {if (response.data.status === 1101) {router.push({path: '/login'})} else if (response.data.status === 200) {resolve(response.data)} else {resolve(response.data)}}).catch(function (error) {reject(error)})})},post (url, data) {return new Promise((resolve, reject) => {axios.post(url, data, {withCredentials: false// headers: {'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8'}}).then(function (response) {if (response.data.status === 1101) {router.push({path: '/login'})} else if (response.data.status === 200) {resolve(response.data)} else {resolve(response.data)}}).catch(function (error) {reject(error)})})}}
})()

另一种写法

import axios from "axios";var service = axios.create({baseURL: process.env.VUE_APP_BASE_API, // url = base url + request url// withCredentials: true, // send cookies when cross-domain requeststimeout: 5000 // request timeout
});// 添加请求拦截器
service.interceptors.request.use(function(config) {// 在发送请求之前做些什么return config;},function(error) {// 对请求错误做些什么return Promise.reject(error);}
);// 添加响应拦截器
service.interceptors.response.use(function(response) {// 对响应数据做点什么return response;},function(error) {// 对响应错误做点什么return Promise.reject(error);}
);
export default service;

总结:

网上很多库,大多都是可以拿来就可以用的,但高手绝不仅仅满足用,而是要对其进行改造,使其适应自己的项目.从而达到提高开发效率.简单易用的效果.

谢谢阅读.如果觉得对你有帮助请记得点赞或收藏.欢迎留言讨论.你的支持是我出产优秀博客的动力.

易扩展,易复用,封装axios相关推荐

  1. C语言实现人民币大小写转换,简洁易扩展易维护

    输入一个整数(位数不超过9位)代表一个人民币值(单位为元),请转换成财务要求的大写中文格式.如23108元,转换后变成"贰万叁仟壹百零捌"元.为了简化输出,用小写英文字母a-j顺序 ...

  2. 小程序子组件向父组件传值_一套组件化、可复用、易扩展的微信小程序 UI 组件库...

    如何使用 Wux Weapp 是一套组件化.可复用.易扩展的微信小程序 UI 组件库.在开始使用之前,需要先阅读微信小程序自定义组件的相关文档. 通过 npm 安装,需要依赖小程序基础库 2.2.1 ...

  3. 开源OpenIM:高性能、可伸缩、易扩展的即时通讯架构

    本文属于OpenIM技术团队原创,转载请注明出处,谢谢 网上有很多关于IM的教程和技术博文,有亿级用户的IM架构,有各种浅谈原创自研IM架构,也有微信技术团队分享的技术文章,有些开发者想根据这些资料自 ...

  4. Reliable, Scalable, and Maintainable Applications 高可靠、易扩展、易运维应用

    寻找翻译本书后续章节合作者  微信:18600166191 ---------------------------------- PART I Foundations of Data Systems ...

  5. 使用Amazon CDK部署基于Amazon Fargate的高可用、易扩展的Airflow集群

    前言 Apache Airflow(以下简称为Airflow) 是一项由Airbnb在 2014 年推出的开源项目,其目的是为了管理日益复杂的数据管理工具.脚本和分析工具,提供一个构建批处理工作流的方 ...

  6. 简单易扩展的爬虫架构

    已经写了好几篇的网络爬虫了,都是单个应用程序,那个下面介绍一下简单易扩展的爬虫架构: 应用场景是:爬取百度百科搜索关键字的1000个相关链接及相应的简介: 模块介绍: 首先是我们的主调度程序spide ...

  7. Pytest自动化框架-权威教程05-Pytest fixtures:清晰 模块化 易扩展

    Fixture函数:清晰 模块化 易扩展 2.0/2.3/2.4版本新函数 text Fixture函数的目的是为测试的重复执行提供一个可靠的固定基线.Fixture函数比经典的xUnit setUp ...

  8. Apache DolphinScheduler:分布式易扩展的可视化工作流任务调度平台

    Apache DolphinScheduler:分布式易扩展的可视化工作流任务调度平台 一.认识Apache DolphinScheduler 二.DolphinScheduler特性 三.Apach ...

  9. ZanUI-WeApp -- 一个颜值高、好用、易扩展的微信小程序 UI 库

    ZanUI-WeApp -- 一个颜值高.好用.易扩展的微信小程序 UI 库:https://cnodejs.org/topic/589d625a5c8036f7019e7a4a 微信小程序之官方UI ...

最新文章

  1. php获取表字段,使用 php 获取表的字段信息
  2. 首航节能:光热行业刚起步 子公司处于亏损状态
  3. leetcode 813. Largest Sum of Averages | 813. 最大平均值和的分组(暴力递归->傻缓存->DP)
  4. 042——VUE中组件之子组件使用$on与$emit事件触发父组件实现购物车功能
  5. flowable实战(十三):为了启动流程实例时给流程加一个标题
  6. 如何在 Ubuntu 20.04 上安装 Java
  7. Nginx的五大应用场景详解
  8. 基于JAVA+SpringBoot+Mybatis+MYSQL的足球联赛管理系统
  9. 利用Diskgen找回分区破坏前的资料
  10. DPDK X710 DDP PPPoE 实践
  11. 最短路径spfa算法
  12. 简洁商业计划书PPT模板
  13. retinex(SSR,MSR,MSRCR)的优缺点
  14. java 熄灯问题_C++基础算法学习——熄灯问题
  15. 致远oa系统报价_致远oa价格(致远oa系统登录)
  16. 腾讯云TCP架构高级工程师认证考试大纲、考题下载及说明
  17. b计划撸站--内容采集筛选
  18. 通过IMSI判断运营商的方法
  19. Python基础---文件
  20. msf后渗透之文件交互指令、上传下载文件、屏幕截图、键盘记录、创建账户、音频录像和提权(上)

热门文章

  1. BigDecimal比较大小工具类
  2. 3蛋白wb_99% 的实验小白都会收藏,WB、ELISA、IHC 进阶攻略
  3. python空气质量指数计算_Python入门案例(八):空气质量指数(AQI)计算
  4. React 中constructor 作用
  5. 프로그래머로 살아남는 법
  6. 解决ntp的错误:no server can be used,exiting
  7. jdbc操作数据库实现查询产品、增加产品库存量例子
  8. 【更新1.0:PoC发布】CVE-2020-1350: Windows DNS Server蠕虫级远程代码执行漏洞通告
  9. 大脑衰老可逆转,只需注入年轻脑脊液,「返老还童」登Nature
  10. 将简体字转换成繁体字