首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

我司是怎么封装 axios 来处理百万级流量中平时少见过的问题~

理想情况下,使用者希望 then 返回有效的数据,catch 返回各种错误情况:请求被取消、网络异常、网络超时、服务端异常、服务端数据格式错误、业务异常。...Axios 默认不处理 content-type 为 application/x-www-form-urlencoded 类型的请求体,使用起来不够方便 优化方案: 如果设置 Axios responseType...保持一致: eaxios 请求配置的 transformResponse 传参和处理时机发生了变化 假设服务端返回的数据结构为 { code: 0, message: 'success', data:...{} },code 为 0 表示正确的响应,非 0 表示异常,接口请求的代码示例如下所示: ps:如果存在服务单接口请求规范,可以通过 eaxios.create 创建适用于不同接口规范的请求函数。...代码示例 下面以 { code: 0, message: 'success', data: { } } 这样的接口规范为例,演示如何使用 eaxios。

80710
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    系统服务化构建-状态码设计要点

    业务状态码与 HTTP 状态码 在 REST 接口设计规范中,我们通常都会被引导为这里的 Code 应该是 HTTP 协议状态码 200,404 或者 501 等。...服务器端的开发实践 为什么上文中着重介绍状态码的两种分类,因为在业界开发中,这两种码会交叉使用,都有具体的使用场景,语义上不应该被混淆。...这里应该以 HTTP 状态码为依据,主要有 200, 401 ,表明请求是【触碰到关于的数据处理的业务部分了】如 HTTP/1.1 200 OK{ "code": 0, "message": "客户端已是最新版本...这里以业务状态码的数据为依据,获取到的就是真实的。Code 可以用 0 表示。...更严谨的说法是 请求的资源描述中包含资源状态编码和描述信息,如 message。 当 data 没有数据时,有的工程师喜欢把 data 置为 null,或者直接不返回 data 字段。

    4.1K30

    Koa的洋葱中间件,Redux的中间件,Axios的拦截器,一个精简版的就彻底搞懂了。

    axios 首先我们模拟一个简单的axios,这里不涉及请求的逻辑,只是简单的返回一个Promise,可以通过config中的error参数控制Promise的状态。...promise return promise; }; 复制代码 从axios.run这个函数看运行时的机制,首先构造一个chain作为promise链,并且把正常的请求也就是我们的请求参数axios...error) }, 复制代码 没有返回任何东西,打印出result3: undefined 可以看出,axios的拦截器是非常灵活的,可以在请求阶段任意的修改config,也可以在响应阶段对response...,要求外部在type匹配不到的时候返回初始状态 // 在这个dispatch后 currentState就有值了。...本文所写的代码都整理在这个仓库里了: github.com/sl1673495/t… 代码是使用ts编写的,js版本的代码在js文件夹内,各位可以按自己的需求来看。

    2K10

    promise & axios & async_await 关于 Promise

    : 1.类方法(静态方法): (1)resolved:成功状态返回一个 Promise 对象; (2)reject:失败状态返回一个Promise 对象; (3)race:多个 Promise 任务同时执行...reject的结果; 2.实例方法: (1).then:它的作用是为 Promise 实例添加状态改变时的回调函数。...,后面我们说 【2】为什么出现Promise 业务上遇到一个请求要依赖前一个请求的结果,如果多个层层回调函数的嵌套叫做“回调地域”,代码不美观而且不易于维护,所以Promise出现了他的链式调用可以解决这一个问题...实例使用then方法返回的是一个新的Promise实例(注意,不是原来那个Promise实例)。...后一个 then会根据前一个then之后返回的Promise对象的状态(成功/失败)去决定走后一个then的成功回调还是失败的回调 const promise = new Promise((resolve

    1.5K20

    前端网红框架的插件机制全梳理(axios、koa、redux、vuex)

    axios 首先我们模拟一个简单的 axios,这里不涉及请求的逻辑,只是简单的返回一个 Promise,可以通过 config 中的 error 参数控制 Promise 的状态。...以这样一段调用代码为例: // 请求拦截器1 axios.useRequestInterceptor(resolved1, rejected1); // 请求拦截器2 axios.useRequestInterceptor...以这样的一段测试代码为例: axios.useRequestInterceptor(config => { return { ...config, extraParams1: "extraParams1...,要求外部在type匹配不到的时候返回初始状态 // 在这个dispatch后 currentState就有值了。...本文所写的代码都整理在这个仓库里了: https://github.com/sl1673495/tiny-middlewares 代码是使用 ts 编写的,js 版本的代码在 js 文件夹内,各位可以按自己的需求来看

    1.9K30

    Ajax第三天

    - 基础使用 目标 了解 AJAX 原理 XHR 的基础使用 讲解 AJAX 是浏览器与服务器通信的技术,采用 XMLHttpRequest 对象相关代码 axios 是对 XHR 相关代码进行了封装,...调用 send 方法,发起请求 02.XMLHttpRequest - 查询参数 目标 使用 XHR 传递查询参数给服务器,获取匹配数据 讲解 复习下什么是查询参数:携带额外信息给服务器,返回匹配想要的数据...答案 表示(管理)一个异步操作最终状态和结果值的对象 为什么学习 Promise ? 答案 成功和失败状态,可以关联对应处理函数,了解 axios 内部运作的原理 Promise 使用步骤?...需求:使用 Promise 和 XHR 请求省份列表数据并展示到页面上 步骤: 创建 Promise 对象 执行 XHR 异步代码,获取省份列表数据 关联成功或失败回调函数,做后续的处理 错误情况:...Promise 和 XHR 封装 myAxios 函数,获取省份列表展示到页面 步骤: 定义 myAxios 函数,接收配置对象,返回 Promise 对象 发起 XHR 请求,默认请求方法为 GET

    7710

    面试官:Vue项目中有封装过axios吗?怎么封装的?

    '', page: 1 } }).then(res => { // res为后端返回的数据 console.log(res); }) 并发请求axios.all([])...为了提高我们的代码质量,我们应该在项目中二次封装一下 axios 再使用 举个例子: axios('http://localhost:3000/data', { // 配置代码 method:...,这块需要和后端约定好 请求方法:根据get、post等方法进行一个再次封装,使用起来更为方便 请求拦截器: 根据请求的请求头设定,来决定哪些请求可以访问 响应拦截器:这块就是根据 后端`返回来的状态码判定执行不同业务...、授权 // 响应拦截器 axios.interceptors.response.use(response => { // 如果返回的状态码为200,说明接口请求成功,可以正常拿到数据 // 否则的话抛出错误...(error.response.status) { // 处理请求失败的情况 // 对不同返回码对相应处理 return Promise.reject(error.response

    2K21

    axios封装错误请求函数

    在使用axios作为请求工具时我们通常不在catch中对错误操作进行处理,我们可以将请求错误的操作放在响应拦截器中进行,日常开发只需要在then做业务即可。...先定义错误代码对应的返回提示 const ErrorCodeMessage = { 200: "服务器成功返回请求的数据。", 201: "新建或修改数据成功。"..., 403: "用户得到授权,但是访问是被禁止的。", 404: "发出的请求针对的是不存在的记录,服务器没有进行操作。", 406: "请求的格式不可得。"..., 410: "请求的资源被永久删除,且不会再得到的。", 422: "当创建一个对象时,发生一个验证错误。", 500: "服务器发生错误,请检查服务器。"..., }; 设置响应拦截器,在第二个回调函数里面设置响应错误的事件,查找错误代码对应的提示文字如果没有就提示请求错误,如果有就提示状态码和提示信息。

    1.2K10

    axios笔记(二) 深入了解axios

    介绍 前端最流行的 ajax 请求库 react / vue 官方推荐使用 axios 发送 ajax 请求 axios 仓库 2. axios 特点 基于 promise 的异步 ajax 请求库 浏览器端.../ node 端都可以使用 支持请求 / 响应拦截器 支持请求取消 请求 / 响应数据转换 批量发送多个请求 3. axios 常用语法 axios(config):最本质的能发任何类型请求的方式...看下下面的流程图就可能可以迎刃而解了(有错可评论指出) 为了解决上面的问题,这时候就需要使用 axios.isCancel(error)判断是不是取消请求导致的请求失败,如果是,则此时不需要把 cancel...因为返回一个pending状态的对象时,后续的回调就不能执行了。 // 因为后面的回调函数只有在状态发生变化时才能执行。...因为返回一个pending状态的对象时,后续的回调就不能执行了。 // 因为后面的回调函数只有在状态发生变化时才能执行。

    3.1K10

    简单入门Fetch API

    简单入门Fetch API 前言 Fetch API是使用 JavaScript请求资源的优秀工具。虽然我们开发时可能是经常使用axios,但是实际上Fetch API也能做很多一样的事。...基本用法 接口有需要可以到最后自取(express接口) 分派请求 只需要使用fetch()方法即可,传参为获取资源的URL。该方法返回一个Promise对象。...这时候可以使用text()方法,这个方法会返回一个Promise对象,这个对象会resolve为读取资源的完整内容。 fetch('http://localhost:8088/getInfo?...很显然不太好,这个时候只需要不是使用text()方法,而是使用json()方法即可。(使用方式和text()方法一样) 请求失败 请求失败的时候还是会正常执行then方法里的处理函数。...(这里的失败是指服务器返回了响应,但是不是成功的请求。)

    1.1K10

    HTTP状态码最全汇总(不求人宝典)

    HTTP状态码,即HTTP协议状态码,是我们访问网站时会遇到的,服务器端返回的Http响应码,不同的数字分别代表着不同的响应状态。...我们在做SEO或做网页开发过程中需要了解5类比较重要的HTTP状态码,可以根据请求响应代码检查服务器及程序是否正常,判断网页处于什么工作状态。我们就需要了解不同的状态码分别是什么含义。...请求已成功处理,返回了多个状态的XML消息 208 208 Already Reported 响应已发送 226 226 IM Used 已完成响应 状态码 Status Code Http状态码含义中文说明...403.18 **** 在当前的应用程序池中不能执行所请求的 URL。这个错误代码为 IIS 6.0 所专用。 403.19 **** 不能为这个应用程序池中的客户端执行 CGI。...这个错误代码为 IIS 6.0 所专用。 404 404 Not Found 请求的内容未找到或已删除 404.1 **** 无法在所请求的端口上访问 Web 站点。

    1.2K20

    前端API层架构,也许你做得还不够

    今天我以vue + axios为例,为大家梳理下我的一些经历和设想。 石器时代,痛苦 直接调用axios,真的痛苦,每个调用的地方都要进行响应状态的判断,冗余代码超级多。...pageNo=1&pageSize=10').then(res => { const data = res.data // 判断请求状态,success字段为true代表成功,视前后端约束而定...if (data.success) { // 结果成功后的业务代码 } else { // 结果失败后的业务代码 } }) 看起来确实很难受,...首先,创建mock专用的axios实例 我们在src目录下新建mock目录,并在src/mock/index.js简单封装一个axios实例 // 仅限模拟数据使用 import axios from..."axios" const mock = axios.create({ baseURL: '' }); // 返回状态拦截 mock.interceptors.response.use(

    1.1K10

    axios 二次封装-状态处理拦截器

    上篇[axios 二次封装-拦截器队列, 这篇是基于拦截器队列实现的状态处理拦截器, 某些情况下我们需要针对不同的响应状态码,执行不同的处理函数。例如: 410 权限校验, 500 服务器错误等。...除了常规的http状态码,后台也可能定了一套内部的请求码,例如: { code: 1, message:'OK' }。由此发现,如果希望通过定义一套处理模板代码,是无法满足实际业务需求的。...这里的处理方式是,拦截器只做基础的流程控制以及接口数据统一。将状态处理转为类似form规则校验的if(){doing} 的方式,交由使用方定义具体的处理规则。...行为(act)可以简化为返回任意值的处理函数。...export const enum CUM_CODE { // 未知捕获 UNKNOWN = -1, // 请求失败,未获取到 status UNKNOWN_RES = -2 } /

    84620

    无感刷新 token 你是怎么做的,不妨进来看看

    实现思路 方法一 后端返回过期时间,前端判断token过期时间,去调用刷新token接口 缺点:需要后端额外提供一个token过期时间的字段;使用了本地时间判断,若本地时间被篡改,特别是本地时间比服务器时间慢时...方法三 在响应拦截器中拦截,判断token 返回过期后,调用刷新token接口 实现 axios的基本骨架,利用service.interceptors.response 进行拦截 import axios...将请求存进队列中后,同时返回一个Promise,让这个Promise一直处于Pending状态(即不调用resolve),此时这个请求就会一直等啊等,只要我们不执行resolve,这个请求就会一直在等待...当刷新请求的接口返回来后,我们再调用resolve,逐个重试。...最终代码: import axios from axios // 是否正在刷新的标记 let isRefreshing = false //重试队列 let requests = [] service.interceptors.response.use

    1.1K20

    实现无感刷新token我是这样做的

    实现思路 方法一 后端返回过期时间,前端判断token过期时间,去调用刷新token接口 缺点:需要后端额外提供一个token过期时间的字段;使用了本地时间判断,若本地时间被篡改,特别是本地时间比服务器时间慢时...方法三 在响应拦截器中拦截,判断token 返回过期后,调用刷新token接口 实现 axios的基本骨架,利用service.interceptors.response 进行拦截 import axios...将请求存进队列中后,同时返回一个Promise,让这个Promise一直处于Pending状态(即不调用resolve),此时这个请求就会一直等啊等,只要我们不执行resolve,这个请求就会一直在等待...当刷新请求的接口返回来后,我们再调用resolve,逐个重试。...最终代码: import axios from 'axios' // 是否正在刷新的标记 let isRefreshing = false //重试队列 let requests = [] service.interceptors.response.use

    1.5K40

    react实战:umi问卷发布系统

    同理,在类似的技术团队里,你不牛,就是留下去的理由。你牛,你就应该培育副手。自身的核心竞争力在于能够不断地提出攻关的方案,去带领团队成员去以技术创新驱动业务发展。...使用更加规范,更加精致的技术手段去实现。当然,我希望会是一个更加牛逼的体现。 和分享一样,如果一个项目不敢开源,那就是代码写的烂。因此届时也将会是开源的。...balance: 100, username: "东尼大涛" } }); } // 返回一个失败的回调...import axios from "axios"; import router from "umi/router"; // 初始状态:本地缓存或空值对象 const userinfo = JSON.parse...所以引入新状态tagSelect=[] 那么展示页面就不能是tag。而是根据tag过滤之后的 displayQuestion 接下来就是一串无聊的业务代码了。

    5.6K30

    Vue合理配置axios并在项目中进行实际应用

    =>{ // 失败的回调 }); /* 支持所有http请求以及请求取消、并发请求等功能,更多细节以及使用方法移步官方文档 文档: [axios文档](http://www.axios-js.com...,当然还有更多状态码判断,根据自己业务需求去扩展即可 * @param {Number} status 请求失败的状态码 */ const errorHandle = (status, other) =...(response.data.code===401){ localStorage.removeItem("token"); } // 只返回response中的data数据 return...响应失败后对状态码进行统一处理 在请求拦截中添加token 在响应拦截中对token过期进行相应处理 api抽离 接口域名抽离 抽离API和域名接口 为什么要进行API抽离?...假设我们所有的请求都在业务代码中写this.$axios.get(),后期接口变更、有新的需求要多传参数过去,我们就要去业务代码里一个个去找然后进行修改,那将是一件很头疼的事。

    2.1K20
    领券