deno.com
在此页上

获取和流式传输数据

Deno 将几个熟悉的 Web API 带到服务器端环境。如果您使用过浏览器,您可能会认出 fetch() 方法和 streams API,它们用于发出网络请求和访问网络上的数据流。 Deno 实现了这些 API,允许您从 Web 获取和流式传输数据。

获取数据 跳转到标题

在构建 Web 应用程序时,开发人员通常需要从 Web 上的其他位置检索资源。我们可以使用 fetch API 来做到这一点。我们将看看如何从 URL 获取不同形状的数据,以及如果请求失败如何处理错误。

创建一个名为 fetch.js 的新文件并添加以下代码

fetch.js
// Output: JSON Data
const jsonResponse = await fetch("https://api.github.com/users/denoland");
const jsonData = await jsonResponse.json();

console.log(jsonData, "\n");

// Output: HTML Data
const textResponse = await fetch("https://deno.land/");
const textData = await textResponse.text();

console.log(textData, "\n");

// Output: Error Message
try {
  await fetch("https://does.not.exist/");
} catch (error) {
  console.log(error);
}

您可以使用 deno run 命令运行此代码。因为它正在跨网络获取数据,所以您需要授予 --allow-net 权限

deno run --allow-net fetch.js

您应该在控制台中看到 JSON 数据、HTML 数据作为文本以及错误消息。

流式传输数据 跳转到标题

有时您可能想要通过网络发送或接收大文件。当您事先不知道文件的大小时,流式传输是处理数据的更有效方式。客户端可以从流中读取,直到它表示已完成。

Deno 提供了一种使用 Streams API 流式传输数据的方法。我们将看看如何将文件转换为可读或可写流,以及如何使用流发送和接收文件。

创建一个名为 stream.js 的新文件。

我们将使用 fetch API 来检索文件。然后我们将使用 Deno.open 方法创建并打开一个可写文件,并使用 Streams API 中的 pipeTo 方法将字节流发送到创建的文件。

接下来,我们将使用 POST 请求上的 readable 属性将文件的字节流发送到服务器。

stream.js
// Receiving a file
const fileResponse = await fetch("https://deno.land/logo.svg");

if (fileResponse.body) {
  const file = await Deno.open("./logo.svg", { write: true, create: true });

  await fileResponse.body.pipeTo(file.writable);
}

// Sending a file
const file = await Deno.open("./logo.svg", { read: true });

await fetch("https://example.com/", {
  method: "POST",
  body: file.readable,
});

您可以使用 deno run 命令运行此代码。因为它正在跨网络获取数据并写入文件,所以您需要授予 --allow-net--allow-write--allow-read 权限

deno run --allow-read --allow-write --allow-net stream.js

您应该看到文件 logo.svg 在当前目录中创建并填充,并且如果您拥有 example.com,您将看到文件被发送到服务器。

🦕 现在您知道如何跨网络获取和流式传输数据,以及如何将数据流式传输到文件以及从文件流式传输数据!无论您是提供静态文件、处理上传、生成动态内容还是流式传输大型数据集,Deno 的文件处理和流式传输功能都是您开发人员工具箱中非常棒的工具!

您找到所需的内容了吗?

隐私政策