浏览器 JavaScript HTTP 库的大比拼:SugerAgent VS Axios
浏览器 JavaScript HTTP 库的大比拼:SugerAgent VS Axios
Ajax 请求在现代网站中大量使用。除了使用执行Ajax请求的内置方法(
XMLHttpRequest
)外,许多开发人员使用jQuery的方法来执行相同的任务。在这篇文章中,我们将介绍两个允许您实现相同目标的备选库。SuperAgent 和 Axios。为了比较它们,我们将对虚拟 HTTP 服务执行一些请求。
简介
Request请求实例可以执行同步或异步请求。JavaScript 是单线程的,因此同步请求会阻止要执行的其他操作。因此,我们实际上从来不使用它们。本文中介绍的库,axios 和superagent,始终执行异步请求。由于您的代码在浏览器在后台执行请求时继续运行,因此无法马上获取响应。您必须提供一个函数来调用服务器响应准备就绪时,通常称为回调,它将处理响应。
为了处理这个过程,Axios返回一个Promise。相反,SuperAgent的 API 不符合任何标准。因此,就这个功能,我们可以说,Axios比SuperAgent更好。优点是,您可以将 axios 返回的Promise与其他库的承诺或使用内置 JavaScript 对象创建的承诺相结合。如果你需要一个Promise的入门教程,你可以阅读本教程。
另一方面,SuperAgent更广为人知,并且围绕它有一个小的插件生态系统(例如,SuperAgent 前缀,以添加一个前缀到所有 URL)。
当您希望使用基本 POST/PUT/GET 功能与 API 通信时,Axios 和SuperAgent是最合适的。例如,它们不支持像在现代浏览器中那样监视上传进度。它们的主要优点是,只需链接几个函数调用,就可以配置和发送请求。
如何安装库
XMLHttpRequest
无需安装。所有现代浏览器,从IE浏览器8开始实现。SuperAgent作为npm模块和组件模块进行分发。要使用 npm 安装SuperAgent,您需要先安装它。npm 附带标准Node.js或io.js安装程序,因此,如果您已经安装了 Node.js/io.js,您应该可以自行操作,或者应该安装您喜欢的其中任何一个。接下来,您需要使用客户端打包解决方案(如浏览器化)在文件中包含。如果您没有任何经验,SitePoint 已经发布了一个教程,其中讨论了浏览器化的功能。
axios 作为 npm 模块、AMD 模块和导出全局对象的普通 JavaScript 文件进行分发。你可以从轴希希布存储库下载他们全部。
示例 API
我们的示例 API 是面包店的订单管理服务。客户端可以通过执行 GET 请求按日期搜索订单,如下所示:
/orders?start=2015-03-23&end=2015-03-24
客户端还可以通过执行 POST 请求创建新订单:
/orders
服务器在 GET 请求时返回的数据以及网站为创建新订单而发送的数据使用 JSON 格式提供。例如,如果当前日期为 5 月 4 日,并且客户需要在 3 月 10 日交付 3 个巧克力蛋糕和 5 个柠檬蛋糕,您可以发送如下 JSON 对象:
{"chocolate": "3","lemon": "5","delivery": "2015-03-10","placed": "2015-03-04"
}
我们的目标是创建一个新订单,并检索在特定日期范围内下订单。
创建新订单
要创建订单,我们需要指定:
- 请求方法(POST)
- 请求 URL (
/orders
) - 请求正文(我们的订单详情为 JSON 格式)
- 请求正文内容类型 (
application/json
)
指定正文内容类型是一种好的做法:服务器可以从请求标头中确定如何分析正文。
我们为每个配置参数配置具有专用方法的SuperAgent请求,然后调用发送请求。函数将回调作为处理响应的参数。如果第一个回调参数为真,则发生错误。让我们看一个例子:end()
end()
var request = require('superagent');request.post('/orders/').send({'chocolate': 2, 'placed': '2015-04-26'}).type('application/json').accept('json').end(function(err, res) {if (err) {console.log('Error!');} else {console.log(res.body);}});
axios 将 URL 作为第一个参数,将请求正文作为第二个参数,将所有剩余配置作为第三个参数。若要处理响应,可以指定两个回调:一个用于成功案例(我将把它传递给 )另一个用于错误案例(我将把它传递给 )。使用示例如下所示:then
catch
axios.post('/orders/',{chocolate: 2,placed: '2015-04-26'},{headers:{'Content-type': 'application/json','Accept': 'application/json'}}
).then(function(response) {console.log(response.data);}).catch(function(response) {console.log('Error!)});
为了使用 实现相同的目标,我们在 函数中配置 HTTP 方法和 URL。然后,我们将响应回调附加到处理程序并调用以发送请求。使用示例如下所示:XMLHttpRequest
open()
onload
send
var xhr = new XMLHttpRequest();// The last parameter must be set to true to make an asynchronous request
xhr.open('POST', '/orders/', true);xhr.setRequestHeader('Content-type', 'application/json');
xhr.setRequestHeader('Accept', 'application/json');
xhr.onload = function() {if (xhr.status >= 200 && xhr.status < 300) {console.log(xhr.response);} else {console.log('Error !');}
};
xhr.send();
浏览器将响应数据附加到对象本身。要知道是否发生了错误,我们必须分析响应状态,并按我们喜欢的方式对其进行管理。在这种情况下,我记录在成功状态(从 200 到 299)时返回的响应;字符串,否则。XMLHttpRequest
'Error !'
基于日期范围检索订单
要检索在日期范围内下订单,我们将设置 一个 和 查询参数。SuperAgent函数采用包含查询参数及其值的对象:start
end
query()
request.get('/orders').query({start: '2015-04-22', end: '2015-04-29'}).accept('json').end(function(err, res) {if (err) {/* Handle error */} else {/* Handle response */}
});
axios 使用配置对象中的键:params
axios.get('/orders',{headers: {'Accept': 'application/json'},params: {start: '2015-04-22',end: '2015-04-29'}}
);
查询字符串不应包含某些字符,特别是 和 。Axios和SuperAgent都小心地为你转义查询参数。&
=
?
使用 ,您需要使用查询字符串的键值对上的内置函数手动转义组件。下面你可以找到一个示例,说明如何做到这一点,即使对于这个特定情况来说,这是多余的:XMLHttpRequest
encodeURIComponent()
var xhr = new XMLHttpRequest();
xhr.open('GET', '/orders?start=' +encodeURIComponent('2015-04-22') + '&end=' +encodeURIComponent('2015-04-29'), true);
建议
虽然Axios使用Promise,但代码看起来几乎与SuperAgent相同。使用SuperAgent,您可以使用专用方法设置内容类型,但使用 axios 时,您需要小心避免标题名称中的拼写错误。
SuperAgent和Axios根据内容类型自动对请求体进行去计算。可以通过在实例上设置属性来实现相同的目标。它们还将所有非 200 响应作为错误处理,同时通过允许您管理状态代码,然后采取相应操作来提供更大的灵活性。
SuperAgent和Axios在服务器上也起作用。然而,在我看来,SuperAgent有最令人愉快的API。但是,如果你想要Promise,Axios是你最好的选择。
最后一点,如果你可以自己处理浏览器差异或只是针对现代浏览器,是Fetch。
好吧,其实superagent也是支持Promise的,而且使用async await,用起来爽的很。个人更喜欢superagent。
结论
在这篇文章中,我们了解如何使用原始、简单的 REST API 通信。这三种解决方案提供等效功能,但具有它们自身的特点。如果您使用现代浏览器,可以依赖 。 并且是方便的,如果您希望避免处理旧版本的 Internet 资源管理器,并在服务器上使用相同的 API。
如果你想玩本文中显示的代码,你可以访问我创建的GitHub存储库。
翻译来源:https://www.sitepoint.com/comparison-javascript-http-libraries/
浏览器 JavaScript HTTP 库的大比拼:SugerAgent VS Axios相关推荐
- 适用于任何数据可视化需求的国外10个最佳JavaScript图表库
如今,数据量呈指数级增长,我们看到的信息越多,处理它的难度就越大.这就是为什么我们需要数据可视化--在图表和仪表板中,最好是交互式的.它帮助我们人类节省了大量时间和精力来查看,分析和理解数据,并根据这 ...
- 2019年11个值得研究的Javascript机器学习库
https://www.toutiao.com/a6669159846014616071/ 虽然大部分机器学习都是用python这样的语言完成的,但在Javascript生态系统中,其前端和后端社区都 ...
- 向 Web 开发人员推荐35款 JavaScript 图形图表库
图表是数据图形化的表示,通过形象的图表来展示数据,比如条形图,折线图,饼图等等.可视化图表可以帮助开发者更容易理解复杂的数据,提高生产的效率和 Web 应用和项目的可靠性. 在这篇文章中,我们收集了3 ...
- js中的new file_深受 Pandas 启发的 JavaScript 开源库 — Danfo.js 现已推出!
特邀博文 / 独立研究员 Rising Odegua 与来自 Data Science Nigeria 的 Stephen Oni Danfo.js 是个 JavaScript 开源库,提供了高性能. ...
- 网页制作中最有用的免费Ajax和JavaScript代码库
本文中,小编整理了12个免费的Ajax和JavaScript代码库,可以帮助Web开发人员将应用程序提升到一个新水平. Ajax Instant Messenger 它是最流行和常用的Ajax代码解决 ...
- Moo.fx 超级轻量级的 javascript 特效库
Moo.fx是 一个超级轻量级的 javascript 特效库(7k),能够与 prototype.js 或mootools 框架一起使用.它非常快.易于使用.跨浏览器.符合标准,提供控制和修改任何 ...
- javascript高级程序设计pdf_2019年最好的JavaScript图表库
作者 | arthur puszynski 来源 | Medium 编辑 | 代码医生团队 首先,简要介绍一下: 随着数据收集和使用持续呈指数级增长,对这些数据进行可视化的需求变得越来越重要.开发人员 ...
- 美观又实用,10 款强大的开源 Javascript 图表库
2019独角兽企业重金招聘Python工程师标准>>> 随着发展,现代 Web 设计在改善体验和功能的同时,对于美观的追求也越来越高,可视化.交互式.动态等元素和效果似乎已成为标配. ...
- 开源的数据可视化JavaScript图表库:ECharts
ECharts (Enterprise Charts 商业产品图表库)是基于HTML5 Canvas的一个纯Javascript图表库,提供直观,生动,可交互,可个性化定制的数据可视化图表.创新的拖拽 ...
最新文章
- 《因果学习周刊》第8期:因果反事实预测
- 计算机网络或计算机基础知识点滴1
- python没有英语基础的好学吗-Python好学吗难不难?0基础能学会吗?
- 摘要:ASP.NET的路由
- mvc:annotation-driven/
- esxi直通 gen8_HP MicroServer Gen8与ESXI采坑之旅
- 671. 二叉树中第二小的节点
- P1110 [ZJOI2007]报表统计
- Hibernate杂问
- 正式环境docker部署hyperf_忍受不了 docker 环境下 hyperf 启动等待时间,教你如何通过 win10 子系统快速运行 hyperf...
- MATLAB函数调用
- 管螺纹如何标注_螺纹知识,这一次搞全了!
- python强制删除文件夹_对Python各种删除文件失败的处理方式-强制删除文件
- 物联网、大数据、云计算、人工智能之间的关系
- SAR图像滤波去噪效果评价研究
- 【Proteus仿真】6位数码管秒计数器(0-999999S)
- 编一程序,将两个字符串连接起来,不要用strcat函数。C语言
- 掌握茼蒿施肥方式,想不高产都难。
- 联想 x系列服务器停产,去年年底惠普、IBM和联想相继在服务器市场失去了份额...
- 互联网上下50年,万字长文推演Web1.0到Web5.0
热门文章
- 远程连接“终端服务器超出了最大允许连接数” 解决
- vs2010 在svn上传东西的时候 出现一个错误 An internal occurred 值不在预期范围内 要如何解决呢?...
- 使用 jQuery Mobile 与 HTML5 开发 Web App (六) —— jQuery Mobile 内容格式
- 网页上的摄影展:等高响应布局实现
- [Linux] rpm 与 dpkg 用法比较
- 11个实用jQuery日历插件
- LinuxCNC基础知识
- Linux——Linux下的tar压缩解压缩命令详解
- Linux—scp或ssh出现WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!
- 【OpenGL】顶点变换常用函数总结