这篇文章将为大家详细讲解有关javascript如何实现取回请求返回的统一拦截,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。
<强>拦截器的目的强>
拦截器(拦截器)一般用于发起http请求之前或之后对请求进行统一的处理,
如令牌实现的登录鉴权(每个请求带上令牌),统一处理404响应等等。
<强>之前的实现强>
区别于axios,获取没有搜到请求返回拦截器相关api,那之前是怎么实现统一拦截的呢,
参照antd-pro,写一个统一的请求方法,所有的请求都调用这个方法,从而实现请求与返回的拦截。
这样我们每次都要去引入这个方法使用,那么有没有更好实现呢?
<强>常见的一道面试题强>
vue双向绑定的原理
- <李>
vue2基于defineProperty
李> <李>vue3基于代理
李>极简的双向绑定
,, const obj =, {}; Object.defineProperty (obj, & # 39;文本# 39;,,{ ,得到:函数(),{ console.log才能(& # 39;get val # 39;);和emsp; }, ,集:函数(newVal), { console.log才能(& # 39;set val: & # 39;, +, newVal); ,,. getelementbyid(& # 39;输入# 39;).value =, newVal; ,,. getelementbyid(& # 39;跨度# 39;).innerHTML =, newVal; ,} }); const input =, . getelementbyid(& # 39;输入# 39;); input.addEventListener (& # 39; keyup # 39;,,函数(e) {=,,obj.text  e.target.value; })
其中我们可以看到运用了看数据劫持。
<强> defineProperty 强>
查看MDN
我们可以发现defineProperty的使用方法
Object.defineProperty (obj,,,,描述符),
描述符属性与方法包含
属价值性的值(不用多说了)
可配置:真的,
总开关,一旦为false,就不能再设置他的(价值,可写,可配置)
可列举的:真的,
是否能在……在循环中遍历出来或在对象。键中列举出来。
可写:真的,
如果为false,属性的值就不能被重写,只能为只读了
设置()
设置属性时候会调用
得到()
访问属性时候会调用
回想下我们使用获取的时候都是直接使用,所以获取是窗口或者全球对象下的一个属性啊,
每次我们使用获取的时候相当于访问了窗口或者全球的属性,也就是上面的得到方法
<强>拦截器的实现
强>
const originFetch =,获取; Object.defineProperty(窗口,“fetch",, { ,可配置:没错, ,可列举的:真的, ,//可写:没错, ,得到(){ return 才能;(url选项),=祝辞,{ ,,return originFetch (url,{…选项,{ ,,,头:,{ ,,,,& # 39;内容类型# 39;:,& # 39;application/json; charset=utf - 8 # 39; ,,,,接受,& # 39;应用程序/json # 39; ,,,,令牌:localStorage.getItem(& # 39;标记# 39;), ,,,,//这里统一加token 实现请求拦截 ,,},…options.headers ,,}})(checkStatus), ,,//,checkStatus 这里可以做返回错误处理,实现返回拦截 ,然后才能(response =祝辞response.json ()) ,} });
只要将上述代码贴到程序入口文件即可
关于“javascript如何实现取回请求返回的统一拦截”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,使各位可以学到更多知识,如果觉得文章不错,请把它分享出去让更多的人看的到。