Bent - 又一个JS HTTP Request Client
- 更新:2020-08-16 19:32:34
- 首发:2020-08-16 19:31:24
- 教程
- 4974
在JavaScript生态中,知名度最高的HTTP Request Library库是axios。有众多插件的HTTP请求库是superagent。各类请求库功能大体相同,用法和用途存在一些差异。今天介绍的HTTP Request Client库则是request的替代品bent。
关于Request
自2020年2月11日起,request已被弃用。具体原因请见:https://github.com/request/request/issues/3142。
Bent
可以作为request
在Node.js下简单高效的替代品。整个库只有三个文件,总代码不超过300行。
browser.js
core.js
nodejs.js
Bent用法示例
简单用法
const bent = require('bent')
// 定义使用GET方式请求并解析返回的JSON数据为JavaScript对象
const get = bent('GET', 'json')
// 定义使用POST方式请求并返回文本
const post = bent('POST', 'string')
const obj = await get('https://api.wyr.me/')
const res = await post('http://todo.sercretcore.cn/ip.php')
返回Buffer/ArrayBuffer
const bent = require('bent')
// 定义使用GET方式请求并返回作为Buffer
const getBuffer = bent('buffer')
const buffer = await getBuffer('https://data.sercretcore.cn/new_avatar.jpeg')
// 将返回的buffer内容转换为Base64
console.log(buffer.toString('base64'))
上述示例中,返回的Base64不带图片类型,可以通过header中的content-type
获得文件类型,或参考《JS推测Base64图片类型》。
返回Stream
const bent = require('bent')
// bent是一个返回异步函数的函数
const request = bent()
; (async () => {
const stream = await request('https://data.sercretcore.cn/new_avatar.jpeg')
console.log(stream.status) // 200
console.log(stream.statusCode) // 200
const fs = require('fs')
stream.pipe(fs.createWriteStream('avatar.jpeg'))
})()
上述示例中,我们将获取到的stream
传输并保存到了文件中,相当于从URL
下载一张图片并保存为文件。
Stream
可以直接返回给客户端。
const bent = require('bent')
// bent是一个返回异步函数的函数
const request = bent()
; (async () => {
const http = require('http')
http.createServer(async function (req, res) {
if (req.method === 'GET') {
const stream = await request('https://data.sercretcore.cn/new_avatar.jpeg')
res.writeHead(stream.statusCode, {
"Content-type": stream.headers['content-type'],
'Content-Length': stream.headers['content-length']
})
stream.pipe(res)
}
}).listen(80)
})()
运行以上代码,访问http://localhost
,浏览器将显示一张图片。
更多用法请访问:https://github.com/mikeal/bent
总结
Axios
非常适合Vue
、React
等前端框架。
superagent
适合爬虫、监控、模拟测试等业务。
需要兼容较老的浏览器可以选择jQuery
的ajax()
方法。
在Node.js
中,以上框架均可使用。由于目前Node.js
对新版JS规范的支持较好,推荐简单高效的bent
。
除特别注明外,本站所有文章均为原创。原创文章均已备案且受著作权保护,未经作者书面授权,请勿转载。
打赏
交流区(2)
调试效率比之前快很多
2020年9月20日 09:02回复
是的
2020年9月20日 09:04回复
感谢回复! Clang 在生成时沿用了 GCC 的版本号标识,我是不是可以理解为Clang 18.1.4生成时使用的就是GCC4.8,所以我后续使用gcc 9.4
gcov
就会有不兼容的问题抱歉,这块我也不太清楚,尝试寻求AI的帮助吧。
我在这个过程中遇到了各种问题- -,现在在UDC core: g_serial: couldn't find an available UDC卡住了,请问大佬有什么解决方案吗,还是说我前置的设置就错了呢,> 这个需求很特殊。是可以的,但是比较困难,需要修改驱动配置。
好思路呀!!
关于hex编辑器,网上没找到特别好用的(小白没办法),最后在vscode上扩展一搜hex,第一个安装一下就可以用vscode进行hex编译了