千家信息网

Node.js中如何发起HTTP请求

发表于:2024-12-13 作者:千家信息网编辑
千家信息网最后更新 2024年12月13日,这篇文章主要介绍Node.js中如何发起HTTP请求,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!正文Node.js HTTPS ModuleNode.js在标准库中带有htt
千家信息网最后更新 2024年12月13日Node.js中如何发起HTTP请求

这篇文章主要介绍Node.js中如何发起HTTP请求,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!

正文

Node.js HTTPS Module

Node.js在标准库中带有https模块,所以你根本不需要引入任何库去发起请求,因为node.js本身就可以完成,处理一些简单的数据请求也是绰绰有余了。

const chalk = require("chalk")const https = require('https')https.get('https://api.juejin.cn/tag_api/v1/query_category_briefs', res => {    let list = [];    res.on('data', chunk => {        list.push(chunk);    });    res.on('end', () => {        const { data } = JSON.parse(Buffer.concat(list).toString());        data.forEach(item => {            console.log(`${chalk.yellow.bold(item.rank)}.${chalk.green(item.category_name)}`);        })    });}).on('error', err => {    console.log('Error: ', err.message);});

从结构上有些许复杂,因为我们要弄一个空数组list来存储请求数据块chunk,然后在请求结束后还要通过Buffer处理数据再解析成json格式。

Axios

相信前端的小伙伴对axios并不陌生,它是一个非常流行且受欢迎的Promise式请求库。它既可以浏览器端使用可以在客户端使用它,而且众所周知,它还有着拦截器,数据自动转换json等十分方便的功能。

我们可以使用以下命令安装axios:

npm i -S axios

下面是我们通过axios获取掘金板块分类简单示例:

const chalk = require("chalk")const axios = require('axios');axios.get('https://api.juejin.cn/tag_api/v1/query_category_briefs').then(res => {    const { data } = res.data    data.forEach(item => {        console.log(`${chalk.yellow.bold(item.rank)}.${chalk.green(item.category_name)}`);    })}).catch(err => {    console.log('Error: ', err.message);});

这里axios直接用get请求请求接口,可以结构也是promise形式的,数据自动帮你解析成json,可以说是非常的简洁与方便。

Got

got声称是"一个人性化且功能强大的 Node.js HTTP 请求库",人性化在于它用了Promise式的API与对JOSN做处理配置等功能,而一些如HTTP2的支持,分页式API以及RFC的缓存等能力是大多数请求库所不具备的。

我们可以使用以下命令安装got:

npm i -S got@10.7.0

下面是我们通过got获取掘金板块分类简单示例:

const chalk = require("chalk")const got = require('got');got.get('https://api.juejin.cn/tag_api/v1/query_category_briefs', {    responseType: 'json'}).then(res => {    const { data } = res.body    data.forEach(item => {        console.log(`${chalk.yellow.bold(item.rank)}.${chalk.green(item.category_name)}`);    })}).catch(err => {    console.log('Error: ', err.message);});

这里我们先要对请求接口进行{responseType: 'json'}的配置,然后返回的数据可以在body里拿到了,也是十分的好用。

Needle

needle是一个比较简洁小巧的请求库,它的形式可以是Promise的方式也可以是回调函数的方式,看自己的习惯选用,而且它的返回值会对XML与JSON自动做出转换,也是非常的方便。

我们可以使用以下命令安装needle:

npm i -S needle

下面是我们通过needle获取掘金板块分类简单示例:

const chalk = require("chalk")const needle = require('needle');needle.get('https://api.juejin.cn/tag_api/v1/query_category_briefs', (err, res) => {    if (err) return console.log('Error: ', err.message);    const { data } = res.body    data.forEach(item => {        console.log(`${chalk.yellow.bold(item.rank)}.${chalk.green(item.category_name)}`);    })})

这里我们演示的用了回调函数的方式来展示,可以看出返回有err与res,成功时err为null,成功后返回的res的body里就是所要请求的数据,这里是帮你自动转化好的json格式。

如果你想使用Promise的方式,可以这么去写:

needle('get', 'https://api.juejin.cn/tag_api/v1/query_category_briefs').then(function(res) {    // ...}).catch(function(err) {    // ...});

Superagent

请求库superagent发布时间可谓是相当的早了可以追溯到2011年,但它是渐进式客户端 HTTP 请求库,与具有相同 API 的 Node.js 模块,支持许多高级 HTTP 客户端功能,依旧是十分的好用。

我们可以使用以下命令安装superagent:

npm i -S superagent

下面是我们通过superagent获取掘金板块分类简单示例:

const chalk = require("chalk")const superagent = require('superagent');superagent.get('https://api.juejin.cn/tag_api/v1/query_category_briefs').then(res => {    const { data } = JSON.parse(res.text)    data.forEach(item => {        console.log(`${chalk.yellow.bold(item.rank)}.${chalk.green(item.category_name)}`);    })}).catch(err => {    console.log('Error: ', err.message);});

现在的superagent用法与axios十分的相似,但是需要去自己把数据处理成json格式。

Node-fetch

顾名思义,这个请求库它的api与window.fetch保持了一致,也是promise式的。最近非常受欢迎,但可能最大的问题是,它的v2与v3版差异比较大,v2保持着cjs标准,而v3则用了ejs的方式,升级后可能造成一些困扰,所以为了统一这个标准我们这里用了2.6.7版作为演示版本。

我们可以使用以下命令安装node-fetch:

npm i -S node-fetch@2.6.7

下面是我们通过node-fetch获取掘金板块分类简单示例:

const chalk = require("chalk")const fetch = require("node-fetch")fetch('https://api.juejin.cn/tag_api/v1/query_category_briefs', {    method: 'GET'}).then(async res => {    let { data } = await res.json()    data.forEach(item => {        console.log(`${chalk.yellow.bold(item.rank)}.${chalk.green(item.category_name)}`);    })}).catch(err => {    console.log('Error: ', err.message);});

可以看出它与window.fetch用起来完全一样,没有任何学习压力。

对比

接下来我们看一下关于这几款请求库近一年的下载量趋势图:

现在我们可以发现,就下载量而言,在过去一年中,node-fetch 最受欢迎,needle 最不受欢迎。


StarsVersionUnpacked SizeCreated Years
axios91,6420.26.1398 kB2014
got10,73612.0.1244 kB2014
needle1,4463.0.0227 kB2012
superagent15,9287.1.1581 kB2011
node-fetch7,4343.2.3106 kB2015

这里我们又统计了这几个库的其他一些数据,axios的star数量可谓一骑绝尘,远远超过其他几个库。

结语

这些请求库,他们都做了同一件事都可以发起HTTP请求,或许写法会有些许不同,但都是条条大路通罗马。就个人而言,也可能是经常写浏览器端的缘故,所以是axios的忠实用户,不管是练习还是开发axios都是首选,当然node-fetch也越来越收到关注,包也十分的小,练习的时候也会经常用到,但api使用起来感觉还是没有axios那般方便。

其实还有两个出名的HTTP请求库本文没有提到:

一个是ky.js,它是一个非常小巧且强大的fetch式的请求库,主要为deno和现代浏览器所打造,所以暂时不参与其中的讨论,感兴趣的同学自己探索。

另一个就是request.js,没有说的原因是它在2020年的时候就已经被完全弃用了,如果有使用过的小伙伴可以在把项目里的request它替换成其他的方法。

以上是"Node.js中如何发起HTTP请求"这篇文章的所有内容,感谢各位的阅读!希望分享的内容对大家有帮助,更多相关知识,欢迎关注行业资讯频道!

数据 可以使 命令 方式 板块 用以 示例 分类 功能 处理 客户 客户端 小伙 小伙伴 标准 格式 浏览器 浏览 小巧 强大 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 福建商城软件开发外包公司哪个好 贵阳黄河服务器供应商 我的世界服务器白名单是什么意思 云服务器如何切回桌面 广东嵌入式软件开发推荐 国家一流网络安全建设学院 服务器维护和更新的区别 dell r220服务器主板 51计划软件开发 国产fpga用什么软件开发 磁盘数据恢复软件开发 360 中标网络安全项目 赣州信丰服务器代码 同一个服务器也跨域 贵阳机架式服务器价格是多少 网络安全事件的法律依据 web服务器部署实训体会 云浮石材商城软件开发 高性能计算集群服务器作用 无线传感涉及到的网络技术 离线模式可以进服务器吗 云服务器兼容哪个软件好 云服务器如何切回桌面 金华电费缴费软件开发团队 数据库技术上机实验第二版 南航网络安全知识竞赛 潮流网络技术有限公司济南 宁夏银行的数据库 政府网络安全监测部门 辽宁语音网络技术分类创新服务
0