Vue中使用axios请求拦截的方法介绍
本篇文章给大家带来的内容是关于Vue中使用axios请求拦截的方法介绍,有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。
一、前言
axios的基础使用就不过多的讲解啦,如何使用可以看axios文档使用说明·Axios中文说明
在这里和大家分享一下axios拦截在实际项目中的使用
很多人都看过axios的官方文档中拦截器这一栏,有的人可能会有点懵,因为文档只告诉你有这个东西,而不告诉你在什么情况下使用。很多初学者就会放弃使用axios拦截器,毕竟拦截器是可以不使用的,但是使用拦截器,会在页面中减少很多不必要的代码。
二、说在前面的
项目使用的ui框架是iview
以下友好提示均使用iview ui的message提示组件,例如this.$Message.xxx
/api/request 仅仅只是例子接口,实际开发用后台提供的接口。
code是后台状态码,我这里也只是例子,不要问我为毛我的返回码和你的怎么不一样这样的问题哈...这些都需要和后台沟通约定的。
使用的请求头是:axios.defaults.headers['Content-Type']
=
'application/x-www-form-urlencoded';至于为什么使用这个请求头可以看看我的另外一篇文章关于axios会发送两次请求,有个OPTIONS请求的问题
因为使用的是这个请求头所以需要用qs模块,不然后台不认这个数据。
三、不使用请求拦截
如果不使用请求拦截,也是可以的,但是会多了非常多的代码,我们以登录页为例。
一个单纯,没有花里胡哨的页面,|ω・)
//双向数据绑定获取值 let httpRequest = {}; httpRequest.loginName = this.loginName httpRequest.password= this.password this.$axios.post("/api/request", this.$qs.stringify(httpRequest)).then(data => { //特殊错误处理,状态为10时为登录超时 if(data.data.code === 10){ this.$Message.error("登录已超时,请重新登录") this.$router.push("/login") //其余错误状态处理 }else if(data.data.code != 0){ this.$Message.error(data.data.msg) //请求成功 }else if(data.data.code === 0){ //进行成功业务逻辑 } //....... });
如果不使用请求拦截,那么对每一条请求每一个状态都要特殊处理,如果请求特殊状态有数十个,每个页面有很多请求,那么页面会变得很长很臃肿,不好维护。
三、使用请求拦截
相同的请求返回代码我们可以抽取出来,写在请求拦截中
当我们设置了拦截之后,在我们的组件代码中可以简化很多,还是以登录界面为例:
在main.js中
//请求发送拦截,把数据发送给后台之前做些什么...... axios.interceptors.request.use((request) => { //这个例子中data是loginName和password let REQUEST_DATA = request.data //统一进行qs模块转换 request.data = qs.stringify(REQUEST_DATA) //再发送给后台 return request; }, function (error) { // Do something with request error return Promise.reject(error); }); //请求返回拦截,把数据返回到页面之前做些什么... axios.interceptors.response.use((response) => { //特殊错误处理,状态为10时为登录超时 if (response.data.code === 10) { iView.Message.error("登录已超时,请重新登录"); router.push("/login") //其余错误状态处理 } else if (response.data.code != 0) { iView.Message.error(response.data.msg) //请求成功 } else if(response.data.code === 0){ //将我们请求到的信息返回页面中请求的逻辑 return response; } //...... }, function (error) { return Promise.reject(error); });
//双向数据绑定获取值 let httpRequest = {}; httpRequest.loginName = this.loginName httpRequest.password= this.password this.$axios.post("/api/request", httpRequest).then(data => { //这是要先判断data,如果请求的数据状态code不为0,会被拦截,则data为undefined if(data){ //进行请求返回成功逻辑 } });
这样我们就对axios请求添加了拦截,可以减少很多代码逻辑,页面可读性更高,可维护性也更高
四、其他
这就是axios拦截的最基础的用法,当然也不止于此,我们也可以进行扩展延伸,做更多的事情,只要你的业务有需求,axios拦截总能帮到你,这些就需要举一反三,工具是死的人是活的,我可以再举个小例子,比如设置请求签名。
请求签名是前台和后台约定的一种沟通方式,对数据进行加密,可以一定程度上保证数据的安全性
还是以这个登录页面为例
//双向数据绑定获取值 let httpRequest = {}; httpRequest.loginName = this.loginName httpRequest.password= this.password this.$axios.post("/api/request", httpRequest).then(data => { //这是要先判断data,如果请求的数据状态code不为0,会被拦截,则data为undefined if(data){ //进行请求返回成功逻辑 } });
我们把httpRequest这个data信息数据发送给后台之前,进行签名,并加密数据
在main.js中,我们对发送的数据进行拦截
//请求发送拦截 axios.interceptors.request.use((request) => { //获取请求的数据,这里是loginName和password let REQUEST_DATA = request.data //获取请求的地址,这里是/api/request let REQUEST_URL = request.url //设置签名并进行qs转换,且赋值给request的data,签名函数另外封装 request.data = qs.stringify(requestDataFn(REQUEST_DATA, REQUEST_URL)) //发送请求给后台 return request; }, function (error) { // Do something with request error return Promise.reject(error); }); //已封装好的签名函数 function requestDataFn(data, method) { let postData = {} //时间戳,时间戳函数不作展示,也是已封装好的 postData.timestamp = getNowFormatDate(); //请求用户的session以及secretKey信息,为空是未登录,登录后我把它存在localStorage中,这个存在哪里都可以,这里只作为例子。 postData.session = localStorage.getItem('session') || ''; postData.secretKey = localStorage.getItem('secretKey') || ''; //请求的地址,这里是/api/request postData.method = method; //请求的数据这里是loginName和password,进行base64加密 let base64Data = Base64.encode(JSON.stringify(data)); //设置签名并进行md5加密 let signature = md5.hex(postData.secretKey + base64Data + postData.method + postData.session + postData.timestamp + postData.secretKey); //把数据再次进行加密 postData.data = encodeURI(base64Data); postData.signature = signature; return postData }
这样我们就完成了对数据加密以及签名,这样再发送给后台。
注意:这里只作为例子展示,如果需要用到签名,如何签名,是前台和后台沟通的结果!
axios请求拦截的用处远远不止这样,具体如何使用,还需要在实际工作,实际项目中随机应变啦。
以上是Vue中使用axios请求拦截的方法介绍的详细内容。更多信息请关注PHP中文网其他相关文章!

热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

AI Hentai Generator
免费生成ai无尽的。

热门文章

热工具

记事本++7.3.1
好用且免费的代码编辑器

SublimeText3汉化版
中文版,非常好用

禅工作室 13.0.1
功能强大的PHP集成开发环境

Dreamweaver CS6
视觉化网页开发工具

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

如何使用WebSocket和JavaScript实现在线语音识别系统引言:随着科技的不断发展,语音识别技术已经成为了人工智能领域的重要组成部分。而基于WebSocket和JavaScript实现的在线语音识别系统,具备了低延迟、实时性和跨平台的特点,成为了一种被广泛应用的解决方案。本文将介绍如何使用WebSocket和JavaScript来实现在线语音识别系

WebSocket与JavaScript:实现实时监控系统的关键技术引言:随着互联网技术的快速发展,实时监控系统在各个领域中得到了广泛的应用。而实现实时监控的关键技术之一就是WebSocket与JavaScript的结合使用。本文将介绍WebSocket与JavaScript在实时监控系统中的应用,并给出代码示例,详细解释其实现原理。一、WebSocket技

如何使用WebSocket和JavaScript实现在线预约系统在当今数字化的时代,越来越多的业务和服务都需要提供在线预约功能。而实现一个高效、实时的在线预约系统是至关重要的。本文将介绍如何使用WebSocket和JavaScript来实现一个在线预约系统,并提供具体的代码示例。一、什么是WebSocketWebSocket是一种在单个TCP连接上进行全双工

如何利用JavaScript和WebSocket实现实时在线点餐系统介绍:随着互联网的普及和技术的进步,越来越多的餐厅开始提供在线点餐服务。为了实现实时在线点餐系统,我们可以利用JavaScript和WebSocket技术。WebSocket是一种基于TCP协议的全双工通信协议,可以实现客户端与服务器的实时双向通信。在实时在线点餐系统中,当用户选择菜品并下单

JavaScript和WebSocket:打造高效的实时天气预报系统引言:如今,天气预报的准确性对于日常生活以及决策制定具有重要意义。随着技术的发展,我们可以通过实时获取天气数据来提供更准确可靠的天气预报。在本文中,我们将学习如何使用JavaScript和WebSocket技术,来构建一个高效的实时天气预报系统。本文将通过具体的代码示例来展示实现的过程。We

JavaScript教程:如何获取HTTP状态码,需要具体代码示例前言:在Web开发中,经常会涉及到与服务器进行数据交互的场景。在与服务器进行通信时,我们经常需要获取返回的HTTP状态码来判断操作是否成功,根据不同的状态码来进行相应的处理。本篇文章将教你如何使用JavaScript获取HTTP状态码,并提供一些实用的代码示例。使用XMLHttpRequest

用法:在JavaScript中,insertBefore()方法用于在DOM树中插入一个新的节点。这个方法需要两个参数:要插入的新节点和参考节点(即新节点将要被插入的位置的节点)。

JavaScript中的HTTP状态码获取方法简介:在进行前端开发中,我们常常需要处理与后端接口的交互,而HTTP状态码就是其中非常重要的一部分。了解和获取HTTP状态码有助于我们更好地处理接口返回的数据。本文将介绍使用JavaScript获取HTTP状态码的方法,并提供具体代码示例。一、什么是HTTP状态码HTTP状态码是指当浏览器向服务器发起请求时,服务
