Bent - 又一个JS HTTP Request Client
- 更新:2020-08-16 19:32:34
- 首发:2020-08-16 19:31:24
- 教程
- 5211
在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回复
老师你好,我希望能用一个openwrt路由器实现IPv4和IPv6的桥接,请问我该如何实现?我尝试了直接新增dhcpv6的接口,但是效果不甚理想(无法成功获取公网的ipv6,但是直连上级路由的其他设备是可以获取公网的ipv6地)
![%E5%B1%8F%E5%B9%95%E6%88%AA%E5%9B%BE20241205230845.png](https://cdn.wyr.me/visitor-files/2024-12-05/1733411344287屏幕截图 2024-12-05 230845.png)你好
,为什么我这里是0039 813C 0600 0075 16xx xx xx,只有前6组是相同的,博客中要前8位相同,这个不同能不能照着修改呢?我系统版本是Win1124H2
大神你好,win11专业版24h2最新版26100.2033,文件如何修改?谢谢
win11专业版24h2最新版26100.2033,Windows Feature Experience Pack 1000.26100.23.0。C:\Windows\System32\termsrv.dll系统自带的这个文件,39 81 3C 06 00 00 0F 85 XX XX XX XX 替换为 B8 00 01 00 00 89 81 38 06 00 00 90。仍然无法远程连接。原来是win11 21h2系统,是可以远程链接的。共享1个主机,2个显示器,2套键鼠,各自独立操作 各自不同的账号,不同的桌面环境。
博主,win11专业版24h2最新版,C:\Windows\System32\termsrv.dll系统自带的这个文件,找不到应该修改哪个字段。我的微信:一三五73二五九五00,谢谢