当前位置:
使用 Got 在 Nodejs 中发出 HTTP 请求
2024-08-01
 1w+

在 node.js 中构建应用程序时,无论您是与外部 api 交互、获取数据还是在服务之间通信,发出 http 请求都是一项基本任务。虽然 node.js 具有用于发出请求的内置 http 模块,但它并不是最用户友好或功能丰富的解决方案。这就是像 got 这样的图书馆的用武之地。

got 是一个轻量级、功能丰富且基于 promise 的 node.js http 客户端。它简化了发出 http 请求的过程,提供了干净的 api、自动重试、对流的支持等等。在本文中,我们将探讨如何使用 got 来发出 http 请求和处理错误。


 
 
 为什么选择 got 来处理 http 请求?

在深入研究代码之前,了解为什么 got 是许多开发人员的首选是很重要的:

  • 简单的 api: got 提供了干净直观的 api,可以轻松执行各种类型的 http 请求。
  • 基于 promise: got 完全基于 promise,允许您使用 async/await 语法来获得更清晰、更易读的代码。
  • 自动重试: got 可以在网络故障或其他问题时自动重试请求,这对于提高应用程序的可靠性特别有用。
  • 支持流: got 支持流,这对于下载大文件或处理块数据非常有用。
  • 可定制: got 是高度可定制的,可以选择修改标头、查询参数、超时等。


 
 
 安装got

要开始使用 got,您首先需要将其安装到 node.js 项目中。如果您尚未设置 node.js 项目,请按照以下步骤操作:

  1. 初始化您的项目:打开终端并为您的项目创建一个新目录:

mkdir got-http-requests cd got-http-requests npm init -y

此命令创建一个新的项目目录并使用 package.json 文件对其进行初始化。

  1. 安装 got: 接下来,使用 npm 安装 got:

npm install got

got 现已添加到您的项目中,您可以开始使用它来发出 http 请求。


 
 
 使用 got 发出 http 请求

got 可以轻松执行各种类型的 http 请求。让我们来看看一些常见的用例。


 
 
 1. 发出基本的 get 请求

get 请求是最常见的 http 请求类型,通常用于从服务器检索数据。使用 got,发出 get 请求非常简单:

const got = require('got'); (async () => { try { const response = await got('https://jsonplaceholder.typicode.com/posts/1'); console.log('get request:'); console.log(response.body); } catch (error) { console.error('error in get request:', error.message); } })();

  • 说明:
  • endpoint: https://jsonplaceholder.typicode.com/posts/1 是一个测试 api,返回 id 为 1 的帖子的详细信息。
  • got 语法:got(url) 函数向指定的 url 发送 get 请求。响应被作为承诺处理,允许我们使用await来等待响应。
  • 响应: 响应正文记录到控制台,其中将包含帖子的 json 数据。


 
 
 2. 发出 post 请求

post 请求用于将数据发送到服务器,通常用于创建新资源。使用 got,您可以轻松地在 post 请求中发送 json 数据:

const got = require('got'); (async () => { try { const response = await got.post('https://jsonplaceholder.typicode.com/posts', { json: { title: 'foo', body: 'bar', userid: 1 }, responsetype: 'json' }); console.log('post request:'); console.log(response.body); } catch (error) { console.error('error in post request:', error.message); } })();

  • 说明:
  • 端点: https://jsonplaceholder.typicode.com/posts 用于在服务器上创建新帖子。
  • json 数据: got 请求中的 json 选项允许您指定要发送的数据。在这里,我们将发送一篇带有标题、正文和用户 id 的新帖子。
  • 响应: 服务器的响应(包括与新 id 一起发送的数据)会记录到控制台。


 
 
 3. 处理错误

http 请求期间可能会出现网络问题或服务器错误。 got 提供了一种简单的方法来处理这些错误:

const got = require('got'); (async () => { try { const response = await got('https://nonexistent-url.com'); console.log(response.body); } catch (error) { console.error('error handling example:', error.message); } })();

  • 说明:
  • 不存在的 url: 此示例尝试向不存在的 url 发出 get 请求。
  • 错误处理: 当请求失败时 got 自动抛出错误。 catch 块捕获此错误并将错误消息记录到控制台。


 
 
 got 的高级功能

got 不仅仅是发出简单的 get 和 post 请求。它配备了一些高级功能,可以帮助您处理更复杂的场景。


 
 
 1. 自定义请求选项

got 允许您通过设置标头、查询参数、超时等来自定义请求:

const got = require('got'); (async () => { try { const response = await got('https://jsonplaceholder.typicode.com/posts/1', { headers: { 'user-agent': 'my-custom-agent' }, searchparams: { userid: 1 }, timeout: 5000 }); console.log('customized request:'); console.log(response.body); } catch (error) { console.error('error in customized request:', error.message); } })();

  • 说明:
  • 标头: 您可以使用 headers 选项设置自定义标头。在这里,我们设置了一个自定义的 user-agent。
  • 查询参数: searchparams 选项允许您向 url 添加查询参数。
  • 超时: 超时选项设置请求在抛出错误之前可以花费的最长时间(以毫秒为单位)。


 
 
 2. 与 got 一起直播

got 支持流式传输,这对于处理大数据或处理文件很有用:

const fs = require('fs'); const got = require('got'); (async () => { const downloadStream = got.stream('https://via.placeholder.com/150'); const fileWriterStream = fs.createWriteStream('downloaded_image.png'); downloadStream.pipe(fileWriterStream); fileWriterStream.on('finish', () => { console.log('Image downloaded successfully.'); }); })();

  • 说明:
  • 流式传输: got.stream(url) 函数发起流式 get 请求。数据直接通过管道传输到可写流,例如文件。
  • 文件写入: fs.createwritestream() 函数用于将流式数据写入文件。

使用 Got 在 Nodejs 中发出 HTTP 请求

在这里下载源代码。


 
 
 结论

got 是一个多功能且强大的库,用于在 node.js 中发出 http 请求。它通过提供干净直观的 api 简化了与 web 服务交互的过程,同时还提供错误处理、超时和流等高级功能。无论您是构建简单的脚本还是复杂的应用程序,got 都是处理 http 请求的绝佳选择。

通过使用 got,您可以编写更清晰、更易于维护的代码,并利用其强大的功能集来满足您的应用程序的需求。因此,下次您需要在 node.js 中发出 http 请求时,请考虑使用 got 以获得无忧无虑的体验。