首页 > 语言 > JavaScript > 正文

详解在Node.js中发起HTTP请求的5种方法

2024-05-06 15:43:21
字体:
来源:转载
供稿:网友

创建HTTP请求使现代编程语言的核心功能之一,也是很多程序员在接触到新的开发环境时最先遇到的技术之一。在Node.js中有相当多的解决方案,其中有语言内置功能,也有开源社区贡献的开发库。下面咱们来看一下比较流行的几种方式。

在开始之前,请先在自己的计算机上安装最新版的node.js和npm。

HTTP - 标准库

首先是标准库中默认的 HTTP 模块。这个模块无需安装依赖外部即可使用,做到了真正的即插即用。缺点是与其他解决方案相比,用起来不是那么友好。

下面的代码将向NASA的API发送一个 GET 请求,并输出当天的天文照片的URL,以及它的注解:

const https = require('https'); https.get('https://api.nasa.gov/planetary/apod?api_key=DEMO_KEY', (resp) => { let data = '';  // A chunk of data has been recieved. resp.on('data', (chunk) => {  data += chunk; });  // The whole response has been received. Print out the result. resp.on('end', () => {  console.log(JSON.parse(data).explanation); }); }).on("error", (err) => { console.log("Error: " + err.message);});

HTTP 和 HTTPS 模块提供的大多数功能是相当有限的。你需要以区块为单位接收响应数据,而不是只提供一个回调函数,以便在收到所有数据后就立即执行。如果它是JSON格式你还需要进行手动解析。尽管工作量不大,但是它仍然会带来一些不必要的操作。

另一个麻烦是, HTTP 和 HTTPS 协议分属两个模块,因此如果我们使用的API是通过 HTTPS 协议进行通信,则需要 HTTPS 模块。

如果你不想向代码库中添加太多的依赖项或希望使用其底层的功能, 那么可能需要花费更多的精力来获取所需的数据, 尽管如此,但是它仍然是一个很好的工具。

Request

Request 是一个简化的http客户端,它和Python的request库很像。这个库比默认的 http 模块更好用,多年来被开源社区作为开发首选。

自从我开始使用Node.js就一直在用,他对快速完成开发任务很有帮助。与 http 模块不同的是,你必须使用npm来安装它。

在终端下进入到你想要代码被下载的目录中,运行以下命令:

npm install request@2.81.0

可以看到,不需要写太多代码就能完成前面的功能:

const request = require('request'); request('https://api.nasa.gov/planetary/apod?api_key=DEMO_KEY', { json: true }, (err, res, body) => { if (err) { return console.log(err); } console.log(body.url); console.log(body.explanation);});

如果你想要一个使用正常方式处理HTTP请求的苦,那么Request是一个很好的选择。如果你想使用Promises,也可以签出request-promise库。

Axios

Axios 是一个基于promise的HTTP客户端,可以用于浏览器和Node.js。在处理需要更复杂的事件链的代码时,使用Promises具有很大的优势。 编写异步代码可能会令人困惑,而Promises是这个问题的几种解决方案之一。 它们甚至被用在其它语言中,比如Swift。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

图片精选