axios怎样实现请求封装及使用?
Admin 2021-09-04 群英技术资讯 1310 次浏览
axios怎样实现请求封装及使用?通常,如果我们是做大型的项目,那么就需要使用到很多接口,而为了使用的方便,将接口封装起来很一个不错的方法,因此下面小编就能给大家分享axios的简单封装,需要的朋友可以参考。
最近在构建项目时,想到了请求的封装,之后就琢磨如何封装才好。虽然对各位大佬来说可能是个小事情,但对我来说也算是一个小小的挑战。在我设想中请求的一些基本配置与具体接口应该放于两个文件,因此我新建了两个文件 axios.js与api.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是项目内所有接口存放的地方
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实例以及解析,感兴趣的朋友可以了解一下,希望能对大家有帮助,想要了解更多大家可以关注群英网络其它相关文章。
文本转载自脚本之家
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:mmqy2019@163.com进行举报,并提供相关证据,查实之后,将立刻删除涉嫌侵权内容。
猜你喜欢
这篇文章主要介绍了详解Typescript里的This的使用方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
二维数组本质上是以数组作为数组元素的数组,即"数组的数组",类型说明符 数组名[常量表达式][常量表达式]。二维数组又称为矩阵,行列数相等的矩阵称为方阵。对称矩阵a[i][j] = a[j][i],对角矩阵:n阶方阵主对角线外都是零元素
这篇文章主要是介绍JavaScript错误捕获的内容,下文有介绍基本使用与逻辑、JavaScript错误捕获特性、错误对象等等内容,对大家学习和理解JavaScript错误捕获有一定的帮助,那么接下来就跟随小编来学习一下吧。
JavaScript封装弹框插件的方法 JavaScript封装弹框插件的具体代码,供大家参考,具体内容如下 知识点1.document.querySelector() 方法 querySelector() 方法返回文档中匹配指定 CSS 选择器的一个元素.注意: querySelector() 方法仅仅返回匹配指定选择器的第一个元素.如果你需要返回所有的元素,请使用 querySelectorAll() 方法替代.querySelectorAll() 方法返回文档中匹配指定 CSS 选择器的所有元素,返回 [NodeList] 对象
这篇文章给大家分享的是有关vue框架中封装方式的内容。小编觉得挺实用的,因此分享给大家做个参考,相信会对新手理解封装有一定的帮助,接下来一起跟随小编看看吧。
成为群英会员,开启智能安全云计算之旅
立即注册关注或联系群英网络
7x24小时售前:400-678-4567
7x24小时售后:0668-2555666
24小时QQ客服
群英微信公众号
CNNIC域名投诉举报处理平台
服务电话:010-58813000
服务邮箱:service@cnnic.cn
投诉与建议:0668-2555555
Copyright © QY Network Company Ltd. All Rights Reserved. 2003-2020 群英 版权所有
增值电信经营许可证 : B1.B2-20140078 粤ICP备09006778号 域名注册商资质 粤 D3.1-20240008