开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第3天,点击查看活动详情
为什么大家都在用axios?
作为一个处理网络请求的库,axios与ajax的不同之处可以使用一句简单的话概况,即——axios∈ajax。axios的官方解释是一个基于promise的网络请求库,通俗的来说,它的主要作用是使用适配器让我们的代码能运行于nodeJS和浏览器之间。
graph TD
axios-->适配器
适配器 --> http
http--> nodejs
适配器-->xhr
xhr-->浏览器
因此,他的优点显而易见,即:
- 支持promise
- 能够在两种环境中无缝切换
那么除此之外,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后面。