搜索
首页web前端js教程浅析Node发起HTTP请求的6种方法
浅析Node发起HTTP请求的6种方法Dec 09, 2022 pm 08:08 PM
nodejs​nodehttphttp请求

Node中怎么发起HTTP请求?本篇文章就来和大家一起探索下Node发起HTTP请求的6种不同方法,希望对大家有所帮助!

浅析Node发起HTTP请求的6种方法

本文介绍6种在nodejs中发起HTTP请求的不同方法,这里我们会通过对掘金社区的板块分类接口 的请求作为演示来完成这个每种不同方法的使用,当然为了更清晰的打印出所得到的数据,我们要提前安装chalk库来给其打印的数据加上颜色,好了,我们马上就要开始啦~【相关教程推荐:nodejs视频教程编程教学

正文


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格式。

1.png

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,可以说是非常的简洁与方便。

2.png

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里拿到了,也是十分的好用。

3.png

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格式。

4.png

如果你想使用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格式。

5.png

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用起来完全一样,没有任何学习压力。

6.png

对比


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

7.png

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


Stars Version Unpacked Size Created Years
axios 91,642 0.26.1 398 kB 2014
got 10,736 12.0.1 244 kB 2014
needle 1,446 3.0.0 227 kB 2012
superagent 15,928 7.1.1 581 kB 2011
node-fetch 7,434 3.2.3 106 kB 2015

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

结语

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

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

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

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

8.png

更多node相关知识,请访问:nodejs 教程

以上是浅析Node发起HTTP请求的6种方法的详细内容。更多信息请关注PHP中文网其他相关文章!

声明
本文转载于:掘金社区。如有侵权,请联系admin@php.cn删除
node、nvm与npm有什么区别node、nvm与npm有什么区别Jul 04, 2022 pm 04:24 PM

node、nvm与npm的区别:1、nodejs是项目开发时所需要的代码库,nvm是nodejs版本管理工具,npm是nodejs包管理工具;2、nodejs能够使得javascript能够脱离浏览器运行,nvm能够管理nodejs和npm的版本,npm能够管理nodejs的第三方插件。

Vercel是什么?怎么部署Node服务?Vercel是什么?怎么部署Node服务?May 07, 2022 pm 09:34 PM

Vercel是什么?本篇文章带大家了解一下Vercel,并介绍一下在Vercel中部署 Node 服务的方法,希望对大家有所帮助!

node爬取数据实例:聊聊怎么抓取小说章节node爬取数据实例:聊聊怎么抓取小说章节May 02, 2022 am 10:00 AM

node怎么爬取数据?下面本篇文章给大家分享一个node爬虫实例,聊聊利用node抓取小说章节的方法,希望对大家有所帮助!

node导出模块有哪两种方式node导出模块有哪两种方式Apr 22, 2022 pm 02:57 PM

node导出模块的两种方式:1、利用exports,该方法可以通过添加属性的方式导出,并且可以导出多个成员;2、利用“module.exports”,该方法可以直接通过为“module.exports”赋值的方式导出模块,只能导出单个成员。

安装node时会自动安装npm吗安装node时会自动安装npm吗Apr 27, 2022 pm 03:51 PM

安装node时会自动安装npm;npm是nodejs平台默认的包管理工具,新版本的nodejs已经集成了npm,所以npm会随同nodejs一起安装,安装完成后可以利用“npm -v”命令查看是否安装成功。

node中是否包含dom和bomnode中是否包含dom和bomJul 06, 2022 am 10:19 AM

node中没有包含dom和bom;bom是指浏览器对象模型,bom是指文档对象模型,而node中采用ecmascript进行编码,并且没有浏览器也没有文档,是JavaScript运行在后端的环境平台,因此node中没有包含dom和bom。

聊聊V8的内存管理与垃圾回收算法聊聊V8的内存管理与垃圾回收算法Apr 27, 2022 pm 08:44 PM

本篇文章带大家了解一下V8引擎的内存管理与垃圾回收算法,希望对大家有所帮助!

聊聊Node.js path模块中的常用工具函数聊聊Node.js path模块中的常用工具函数Jun 08, 2022 pm 05:37 PM

本篇文章带大家聊聊Node.js中的path模块,介绍一下path的常见使用场景、执行机制,以及常用工具函数,希望对大家有所帮助!

See all articles

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

AI Hentai Generator

AI Hentai Generator

免费生成ai无尽的。

热门文章

R.E.P.O.能量晶体解释及其做什么(黄色晶体)
3 周前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳图形设置
3 周前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您听不到任何人,如何修复音频
3 周前By尊渡假赌尊渡假赌尊渡假赌

热工具

mPDF

mPDF

mPDF是一个PHP库,可以从UTF-8编码的HTML生成PDF文件。原作者Ian Back编写mPDF以从他的网站上“即时”输出PDF文件,并处理不同的语言。与原始脚本如HTML2FPDF相比,它的速度较慢,并且在使用Unicode字体时生成的文件较大,但支持CSS样式等,并进行了大量增强。支持几乎所有语言,包括RTL(阿拉伯语和希伯来语)和CJK(中日韩)。支持嵌套的块级元素(如P、DIV),

SecLists

SecLists

SecLists是最终安全测试人员的伙伴。它是一个包含各种类型列表的集合,这些列表在安全评估过程中经常使用,都在一个地方。SecLists通过方便地提供安全测试人员可能需要的所有列表,帮助提高安全测试的效率和生产力。列表类型包括用户名、密码、URL、模糊测试有效载荷、敏感数据模式、Web shell等等。测试人员只需将此存储库拉到新的测试机上,他就可以访问到所需的每种类型的列表。

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

安全考试浏览器

安全考试浏览器

Safe Exam Browser是一个安全的浏览器环境,用于安全地进行在线考试。该软件将任何计算机变成一个安全的工作站。它控制对任何实用工具的访问,并防止学生使用未经授权的资源。

PhpStorm Mac 版本

PhpStorm Mac 版本

最新(2018.2.1 )专业的PHP集成开发工具