为什么大家都在用axios?

292 阅读3分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第3天,点击查看活动详情

为什么大家都在用axios? 作为一个处理网络请求的库,axios与ajax的不同之处可以使用一句简单的话概况,即——axios∈ajax。axios的官方解释是一个基于promise的网络请求库,通俗的来说,它的主要作用是使用适配器让我们的代码能运行于nodeJS和浏览器之间。

graph TD
axios-->适配器
适配器 --> http
http--> nodejs
适配器-->xhr
xhr-->浏览器

因此,他的优点显而易见,即:

  1. 支持promise
  2. 能够在两种环境中无缝切换

那么除此之外,axios还有什么优点呢?

除了多用法以外(用法过多,此处不赘述),axios的强大之处,主要在它的配置。

引入

我们可以在项目中import或者require引入axios

使用方法

常规的.post/.get方法之外,config.url和baseURL在axios的配置也有值得我们一看,比如我们可以全局的声明一个常用的前缀(域名)baseURLaxios.default.baseURL="http://xxxxx"然后再每一次请求时直接在url里写后缀。这也是比较常见的写法

而通过axios的源码我们可以发现,

const fullPath = buildFullPath(config.baseURL, config.url);
export default function buildFullPath(baseURl,requestedURL) 
{
    if (baseURL && !isAbsoluteURL(requestedURL)){
    //由该if条件可知:
    //如果传入baseURL或者下方url传入绝对路径(即带域名)之一时,
    //则将域名与下方绝对路径相组合,返回最终的访问路径
        return combineURLs(baseURL,requestedURL);
    }
    return requestedURL;
}

除此之外,axios还含有自动纠错功能,即如果我们一不小心在路径开头处写了‘/’,axios也会人道的给我们纠正过来。

export default function combineURLs(baseURl,relativeURL) {
    return relativeURL
    ? baseURL.replace(/\/+$/,'') +'/' + relativeURL.replace(/^V+/,'')
    :baseURL;
}

关于axios的配置项详解

method

包括常用的get、post、delete等请求

header

这里不得不展开说说了

通常的请求头一般分为协商协商结果两部分

协商: 一般在发请求之前,客户端会先发送Accept、Accept-Language、Accept-Encoding请求头进行与服务器进行协商,至于设计过程请参考之前发表的【关于前端跨域的理解与解决方案】文章。

协商结果: 客户端和服务器端的协商结果最终会呈现在对应的Content-Type、Content-Language、Content-Encoding中。


通常用来配置请求头,添加请求头之后我们即基本可以知道这个请求的基本作用是什么(比如,了解客户端接受的数据格式【Accept】、请求为同步请求还是异步请求【X-Request-With】、服务端采用的类型【Content-type】、登陆时需要接收的Cookie【Cookie】。

此处我们延伸出axios另外牛B的一方面:它可以根据我们的data的数据类型推断出Content—Type。

data

通过axios传递过去的数据

axios所独有之Param

这是axios所独有的一个属性,其独特之处在于他可以把params中的数据拼装到URL的尾部(此处也可以说param也可以处理原本的query);axios可以将params中的键值序列话称字符串拼接到url后面。