简中文档
On this page

获取和流数据

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

获取数据 Jump to heading

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

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

fetch.js
// 输出:JSON 数据
const jsonResponse = await fetch("https://api.github.com/users/denoland");
const jsonData = await jsonResponse.json();

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

// 输出:HTML 数据
const textResponse = await fetch("https://deno.land/");
const textData = await textResponse.text();

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

// 输出:错误信息
try {
  await fetch("https://does.not.exist/");
} catch (error) {
  console.log(error);
}

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

deno run --allow-net fetch.js

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

流式传输数据 Jump to heading

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

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

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

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

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

stream.js
// 接收文件
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);
}

// 发送文件
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 的文件处理和流式传输能力都是您开发工具箱中的绝佳工具!

你找到了你需要的东西吗?

编辑此页面
隐私政策