首页 > 其他分享 >Axios 面试题

Axios 面试题

时间:2023-05-03 16:34:35浏览次数:52  
标签:面试题 axios return 请求 发送 Axios error config

一、Axios是什么?
Axios是一个基于promise的网络请求库,可用于node.js和浏览器中。它是isomorphic的(即同一套代码可以运行在浏览器和node.js中)。在服务端它使用原生node.js http模块,而在客户端(浏览器端)则使用XMLHttpRequests。

特性
1. 从浏览器创建XMLHttpRequests,从node.js创建http请求
2. 支持promise API
3. 拦截请求和相应,转换请求和相应数据,取消请求,自动转换JSON数据
4. 客户端支持防御XSRF

 

二、取消请求
Axios支持以fetch API的方式,AbortController取消请求

const controller = new AbortController();
axios.get('/foo/bar',{
  signal:controller.signal
}).then(res => {
   console.log(res.data)
})

//取消请求
controller.abort()

 

三、拦截器
在请求或响应被then或catch处理签拦截它们

//添加请求拦截器
axios.interceptors.request.use(config => {
//在发送请求之前做些什么
return config
},err => {
//对请求错误做些什么
return Promise.reject(err)
})
//添加响应拦截器
axios.interceptors.response.use(res=>{
//2xx范围的状态码都会触发该函数
//对响应数据做点什么
return response
},err=>{
return Promise.reject(err)
})

如果你需要稍后移除拦截器,可以这样

const myInterceptor = axios.interceptors.request.use(/*...*/)
axios.interceptors.request.reject(myInterceptor);

可以给自定义的axios实例添加拦截器

const instance = axios.create();
instance.interceptors.request.use(/**/)

 

四、请求失败,重复发送请求

1. 使用 axios.create 创建 axios,设置请求超时时间,重试请求次数,重试请求间隔

2. 设置响应拦截器

  a。若返回响应内容,则直接返回错误信息,不再发送请求

  b。若没有响应内容,则记录发送请求次数,若小于重试请求次数,返回 一个 promise,在发送下一次请求之前停留一段时间,再次重复请求,否则,返回错误信息

import axios from 'axios';
//创建一个axios实例
const requests = axios.create({
  timeout: 5 * 1000, //请求超时时间(5秒后还未接收到数据,就需要再次发送请求)
  retry: 3, //设置全局重试请求次数(最多重试几次请求)
  retryDelay: 1000, //设置全局请求间隔
});
 
//响应拦截器  
requests.interceptors.response.use((res) => {
  return Promise.resolve(res.data);
}, (error) => {
  //console.log(error);
  //超时处理 error.config是一个对象,包含上方create中设置的三个参数
  var config = error.config;
  if (!config || !config.retry) return Promise.reject(error);
 
  //如果有响应内容,就直接返回错误信息,不再发送请求
  if(error.response.data){
    return Promise.reject({type: "error", msg: error.response.data});
  }
 
  // __retryCount用来记录当前是第几次发送请求
  config.__retryCount = config.__retryCount || 0;
 
  // 如果当前发送的请求大于等于设置好的请求次数时,不再发送请求,返回最终的错误信息
  if (config.__retryCount >= config.retry) {
    if (error.message === "Network Error") {
      //message为"Network Error"代表断网了
      return Promise.reject({type: "warning",msg: "网络连接已断开,请检查网络"});
    } else if (error.message === "timeout of 5000ms exceeded") {
      //网太慢了,5秒内没有接收到数据,这里的5000ms对应上方timeout设置的值
      return Promise.reject({type: "warning",msg: "请求超时,请检查网络"});
    } else {
      //除以上两种以外的所有错误,包括接口报错 400 500 之类的
      return Promise.reject({type: "error",msg: "出现错误,请稍后再试"});
    }
  }
  
  // 记录请求次数+1
  config.__retryCount += 1;
 
  // 设置请求间隔 在发送下一次请求之前停留一段时间,时间为上方设置好的请求间隔时间
  var backoff = new Promise(function (resolve) {
    setTimeout(function () {
      resolve();
    }, config.retryDelay || 1);
  });
 
  // 再次发送请求
  return backoff.then(function () {
    return requests(config);
  });
})
 
export default requests;

 

五、为什么支持浏览器中发送请求也支持node发送请求?

使用的是适配器模式

  1. 判断环境,然后根据环境使用对应的适配器
  2. 在 axios.defaults.adapter 中,判断在浏览器环境中使用 XMLHttpRequest 请求,在node环境中使用http请求

 

标签:面试题,axios,return,请求,发送,Axios,error,config
From: https://www.cnblogs.com/gqx-html/p/17369222.html

相关文章

  • Redux 面试题
    1、什么是Redux?Redux用于全局的状态管理 2、为什么在React项目中要使用Redux?因为React是单向数据流的,数据只能从父组件通过props流向子组件,但如果子组件要想修改父组件的值,就只能通过给绑定函数传递参数的形式来修改,一旦项目中数据比较复杂时,这种形式会搞得一团糟,所以需要Re......
  • 网络协议面试题
    1.TCP和UDP的区别?答:TCP是面向连接的传输协议,提供可靠的数据传输和错误检测,适用于对可靠性要求较高的场景,如文件传输,网页访问等;UDP是无连接的传输协议,不保证传输的可靠性,适用于对实时性要求较高的场景,如视频会议,音频传输等。2.OSI参考模型和TCP/IP协议模型的区别是什么?......
  • React 中 Router的相关面试题
    一、请你说说react的路由是什么?React的路由是纯前端的路由,就是根据hash或browserpath的变化,框架内封装好了方法,可以自由的切换DOM展示,来模拟页面或局部页面被替换的目的;让浏览器不用刷新,也能获取想要的页面结构,保存内存数据,提升用户体验 二、React-Router实现原理?当url发......
  • 面试题5-2
    一、硬链接与软链接的区别?​ 硬链接是具有相同inode号的不同名字的文件,删除一个硬链接文件不影响具有相同inode的文件。硬链接只能是对同一文件系统中的文件进行链接。不能对目录进行创建。软链接有自己的inode。文件用户数据块里面存放的内容就是文件的绝对路径。软链接可以用来......
  • Less 相关面试题
    一、Less是什么?Less(LeanerStyleSheets的缩写)是一门向后兼容的CSS扩展语言。二、声明变量@变量名:变量值 三、less封装函数less还可以像js一样的来封装函数,需要时可以直接调用。.borderName(@px){border-radius:@px;}.box5{.borderName(10px)}......
  • 2023前端面试题二
    图片png无损压缩,尺寸体积要比jpg的大,适合做小图标jpg采用压缩算法,有一点失真,比png体积要小,适合做中大图片gif一般是做动图的webp同时支持有损或者无损压缩,相同质量的图片,webp具有更小的体积css的盒子模型标准盒子模型margin/border/padding/contentie盒子模型marg......
  • 如何将input里面的数值传输到servlet后台(利用vue+axios实现)
    相关步骤1、为input输入框加一个属性v-model2、并相应设置一个button3、vue里面的data定义上这个v-model值4、因为获取到了相关的数值,需要将其传递到后台,用post方式5、定义我们需要传递到url的数据完成!......
  • 17、架构师面试题系列之Maven面试专题及答案(18题)
    架构师面试题之Maven专题篇一、Maven有哪些优点和缺点优点如下:1.简化了项目依赖管理:2.易于上手,对于新手可能一个"mvncleanpackage"命令就可能满足他的工作3.便于与持续集成工具(jenkins)整合4.便于项目升级,无论是项目本身升级还是项目使用的依赖升级。5.有助于多模块项目的开发,......
  • SpringBoot高频面试题
    Springboot的优点内置servlet容器,不需要在服务器部署tomcat。只需要将项目打成jar包,使用java-jarxxx.jar一键式启动项目SpringBoot提供了starter,把常用库聚合在一起,简化复杂的环境配置,快速搭建spring应用环境可以快速创建独立运行的spring项目,集成主流框架准生产环境的......
  • Vue 异步通信Axios
    使用Axios实现异步通信需要先导入cdn:<scriptsrc="https://unpkg.com/[email protected]/dist/axios.min.js"></script>使用到的数据data.json{"name":"kuang","url":"https://www.bilibili.com/?spm_id_from=333.788.0......