axios拦截器原理,axios拦截器使用教程

http://www.itjxue.com  2023-01-16 01:53  来源:未知  点击次数: 

axios请求封装,请求异常统一处理

前端采用了 axios 来处理网络请求,为了避免在每次请求时都去判断各种各样的网络情况,比如连接超时、服务器内部错误、权限不足等等不一而足,我对 axios 进行了简单的封装,这里主要使用了 axios 中的拦截器功能。

封装后的网络请求工具 js 如下:

封装之后的错误信息这个大家一目了然,没啥好说的,唯一要说的是当出错的时候我执行的是: Promise.resolve(err); ,而不是 Promise.reject(err);

这是什么原因呢?

因为封装 axios 一个重要的目的就是希望能够对错误进行统一处理,不用在每一次发起网络请求的时候都去处理各种异常情况,将所有的异常情况都在工具 js 中进行统一的处理。但是这种方式也带来一个问题,就是我在发起网络请求的时候,一般都会开启一个进度条,当网络请求结束时,不论请求成功还是失败,我都要将这个进度条关闭掉,而失败的处理我都统一写在工具 js 里边了,因此就没在请求失败时关闭进度条了,解决这个问题,有两种方案:

直接在 request 的拦截器中开启一个 fullscreen 的 loading,然后在 response 的拦截器中将其关闭,即我将进度条也封装到工具 js 中了,但是非常不推荐这种方式,因为这种方式的用户体验非常之差,有兴趣的小伙伴可以自己试一下就知道了。

第二种解决方案就是大家看到的,我返回一个 Promise.resolve(err),则这个请求不会就此结束,错误的 message 我已经弹出来了,但是这条消息还是会继续传到 then 中,也就是说,无论请求成功还是失败,我在成功的回调中都能收到通知,这样我就可以将 loading 关闭了,比如下面这个登录请求:

axios中的请求拦截器怎么用

vue-resource不再维护之后,我也用起了axios,但是死活无法设置服务器发送过来的cookie

后来查询文档发现,这个是要单独配置的。

// `withCredentials` indicates whether or not cross-site Access-Control requests // should be made using credentials withCredentials: false, // default

当我们把此配置项设置成默认配置项并且设置成true的时候,axios就可以设置cookies了。

全局默认配置设置方法:

axios.defaults.withCredentials=true

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

axios响应拦截器return的值是promise吗

axios响应拦截器return的值不是promise。根据查询相关公开信息显示,promise不是axios的响应拦截器中的return的值。Axios,是一个基于promise的网络请求库,作用于node.js和浏览器中,它是isomorphic的(即同一套代码可以运行在浏览器和node.js中)。

fetch拦截器的实现

fetch拦截器(interceptors)一般用于发起http请求之前或之后对请求进行统一的处理,如token实现的登录鉴权(每个请求带上token),统一处理404响应等等。ajax拦截器有很多ajax库已经实现了,如jq的$.ajaxSetup(),$.ajaxPrefilter(),$.ajaxError;axios的axios.interceptors.request.use(),axios.interceptors.response.use();vue-resource的Vue.http.interceptors.push()等等。

??fetch常用的库有whatwg-fetch,node-fetch,isomorphic-fetch。whatwg-fetch是做了polyfill的让不支持fetch的 browser也可以使用fetch,node-fetch运行在node上,isomorphic-fetch是对前两者做了封装,既可以跑在browser上也可以跑在node上。然后下面是一个简易的fetch拦截器的实现。

原理很简单,把原生的fetch封装起来,维护两个数组,分别保存请求之前的操作和请求之后的操作,用新的fetch api做请求,依次执行这些操作,拦截处理数据。

使用示例:

(责任编辑:IT教学网)

更多

推荐管理维护文章