axios封装怎么实现(axios的简单封装以及使用实例代码)
类别:编程学习 浏览量:805
时间:2021-10-20 08:31:49 axios封装怎么实现
axios的简单封装以及使用实例代码前言
最近在构建项目时,想到了请求的封装,之后就琢磨如何封装才好。虽然对各位大佬来说可能是个小事情,但对我来说也算是一个小小的挑战。在我设想中请求的一些基本配置与具体接口应该放于两个文件,因此我新建了两个文件 axios.js与api.js
axios.js
axios.js主要是针对axios的一些基本配置: baseURL 请求拦截器 响应拦截器 等等
import axios from 'axios'; import ElementUI from 'element-ui'; import 'element-ui/lib/theme-chalk/index.css'; import router from '../router';
首先在当前js中引入axios,引入element是为了在当前js内可以使用其组件,目的是为了在响应拦截器中对各种返回值进行直接提示。引入router的为了在响应拦截器中根据具体返回值来进行页面跳转,比如没有权限则跳转到登录页面
if (process.env.NODE_ENV === 'development') { axios.defaults.baseURL = 'api'; } else if (process.env.NODE_ENV === 'production') { axios.defaults.baseURL = 'https://xxxxxxxxxx/index/'; }
对于baseURL的处理,我区分了开发环境与生产环境
//请求拦截器 区分了一下正常请求时与发送formdata时的请求头 axios.interceptors.request.use((config) => { config.headers['Content-Type'] = 'application/json'; if (config.method === 'post') { //FormData时的请求头 if (Object.prototype.toString.call(config.data) === '[object FormData]') { // 请求拦截器处理 config.headers['Content-Type'] = 'multipart/form-data'; } else if (Object.prototype.toString.call(config.data) === '[object String]') { config.headers['Content-Type'] = 'application/x-www-form-urlencoded'; } } else { config.headers['Content-Type'] = 'application/json'; } return config; }); //响应拦截器 axios.interceptors.response.use( (config) => { let value = config.data; if (config.status && config.status === 200) { if (typeof value === 'string') { if (value === 'timeout') { ElementUI.MessageBox.confirm('太长时间没有操作或操作没有权限,请进入登录页面重新登录?', '提示', { confirmButtonText: '确定', type: 'warning' }).then(() => { router.push({ name: 'login' }); }); }else { ElementUI.Message.info(value); } } } return config; }, (err) => { let value = err.response.statusText; switch (err.response.status) { case 400: ElementUI.Message.error('语法格式有误,服务器无法理解此请求') break; case 401: case 403: case 404: case 405: ElementUI.Message.warning(value); break; default: ElementUI.Message.error('操作过程出错,此次操作无效!' + value); break; } return err.response } );
对于响应拦截器,我这边是根据自己后端返回的值来处理,因为没怎么弄过后端所以只是对返回简单处理了一下
下面是对get与post的一个封装
export async function axiosGet(url, params = {}) { let res = await axios.get(url, { params: params }); if(res.status === 200){ return res.data }else { throw res.statusText } } export async function axiosPost(url, params = {}) { let res = await axios.post(url, params); if(res.status === 200){ return res.data }else { throw res.statusText } }
使用async与await 直接取到返回值进行判断,如果返回成功则输出返回值 如果不成功则抛出错误
最后将封装的方法导出
api.js
整个api.js是项目内所有接口存放的地方
import { axiosGet,axiosPost } from './axios'
引入axios.js,获取到封装的axiosGet与axiosPost
export default { getLogin:(params = {}) => { return axiosPost('/login', params) }, getUser:(params = {}) => { return axiosGet('http://localhost:3000/user', params) } }
这里我使用简单的两个接口来做示例,在api.js中的处理就已经完成了
使用配置好的接口
到这里我们的axios已经封装完毕,接下来就是使用的演示了
import DbauditServer from '@/server/api' //在要调用接口的文件中引入api.js let formData = new FormData formData.append('password', this.formLabelAlign.password) let res1 = await DbauditServer.getLogin(formData) //直接调用就可以正常使用了 let res2 = await DbauditServer.getUser()
当然还可以细致一些,因为之前封装get与post的时候遇到错误返回值是直接抛出,因此,接口的调用也可以使用try catch来包裹,对error进行特定的处理即可。
总结
到此这篇关于axios的简单封装以及使用的文章就介绍到这了,更多相关axios简单封装内容请搜索开心学习网以前的文章或继续浏览下面的相关文章希望大家以后多多支持开心学习网!
您可能感兴趣
- vue组件滚动加载教程(Vue组件封装上传图片和视频的示例代码)
- laravel 数据表格(Laravel自定义 封装便捷返回Json数据格式的引用方法)
- entity framewrk访问数据库的封装类
- php 结果集转json(PHP的JSON封装、转变及输出操作示例)
- vue怎么引入axios(如何用vue封装axios请求)
- vue父组件怎么用子组件的数据(Vue使用v-model封装el-pagination组件的全过程)
- php创建多个文件(PHP实现单文件、多个单文件、多文件上传函数的封装示例)
- python发送钉钉消息(钉钉群自定义机器人消息Python封装的实例)
- vue3封装table组件(Vue封装通用table组件的完整步骤记录)
- vue引入axios(vue封装axios的几种方法)
- docker怎么使用supervisor(supervisor下的Dockerfile的多服务镜像封装操作)
- css下填充代码(CSS学习笔记之常用Mixin封装实例代码)
- vue项目有element插件(Vue Element前端应用开发之前端API接口的封装)
- python自定义定时任务(python的schedule定时任务模块二次封装方法)
- php 上传图片如何压缩(PHP实现将上传图片自动缩放到指定分辨率,并保持清晰度封装类示例)
- angular封装进度条组件(如何用DevUI搭建自己的Angular组件库)
- 《倚天屠龙记》再遭翻拍,关晓彤主演赵敏,蒋劲夫演张无忌,你怎么看(倚天屠龙记再遭翻拍)
- 吴启华与曾舜晞两代张无忌同框,戏里经典的他却没活出原著的潇洒(吴启华与曾舜晞两代张无忌同框)
- 经常发这三种 朋友圈 的人,要迅速屏蔽(经常发这三种朋友圈)
- 有种尴尬叫朋友圈忘屏蔽,大学生上演社死现场,父母亲自下场吐槽(有种尴尬叫朋友圈忘屏蔽)
- 朋友圈屏蔽你的人,可以直接看淡了(朋友圈屏蔽你的人)
- 金球奖只青睐那些会戴珠宝的女人(金球奖只青睐那些会戴珠宝的女人)
热门推荐
- python提供的四种基本数据类型(浅谈python的输入输出,注释,基本数据类型)
- vuecli项目入门(vue-cli4.5.x快速搭建项目)
- nginx安全设置(Nginx+ModSecurity安全模块部署的实现)
- html样式中css怎么设置行高(CSS设置HTML元素的高度与宽度的各种情况总结)
- php class使用场景(php反射学习之不用new方法实例化类操作示例)
- 怎么用腾讯云主机搭建网站(用云主机怎么搭建网站?云主机建网站完整流程)
- google 调试vue(Vue实现Google第三方登录的示例代码)
- javascript 数组排序
- 如何用python编写抽奖(详解用python写一个抽奖程序)
- vueelementui动态表格(Vue Element前端应用开发之常规的JS处理函数)
排行榜
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9