deno.com
本页内容

Deno API 简介

视频描述 跳转到标题

在本视频中,我们将探索 Deno 在全局命名空间中提供的强大 API。我们将演示文件系统操作,如使用 Deno 内置方法创建、读取、写入和追加文件。然后,我们将研究如何处理命令行参数、环境变量以及设置一个基本服务器。通过这些 Deno 内置 API,我们可以减少对外部 API 的依赖。

转录和示例 跳转到标题

在全局命名空间中,Deno 提供了大量您可以利用的 API。让我们看几个例子。

创建和写入文件 跳转到标题

为了写入文件,首先我们将 `await Deno.open`,并传入我们想要创建的文件名。第二个参数将是一个对象,我们将 `read`、`write` 和 `create` 设置为 `true`

main.ts
await Deno.open("thoughts.txt", {
  read: true,
  write: true,
  create: true,
});

要运行此代码,我们将使用

deno main.ts

运行时,控制台会提示我们允许读取权限,所以我们会选择“是”(或 `y`)。然后它会请求写入权限,这非常棒(我们也会用 `y` 允许),这样我们就授予了两种权限,现在我们已经创建了一个名为 `thoughts.txt` 的文件。

如果我们要向此文件写入一些数据,我们可以对 `main.ts` 文件进行一些调整。让我们为文件创建一个变量(名为 file),然后我们将 `append:true` 添加到传递给 `Deno.open` 方法的对象中(我想我们也可以删除 create,因为文件已经创建了)

main.ts
const file = await Deno.open("thoughts.txt", {
  read: true,
  write: true,
  append: true,
});

接下来,在此之下,我们将创建一个名为 `encoder` 的常量,并将其设置为一个新的文本编码器。然后我们将创建第二个名为 `data` 的常量,它将调用 `encode`。最后,我们将在 `data` 中添加一个包含换行符和一些文本的字符串。

main.ts
const encoder = new TextEncoder();
const data = encoder.encode("\nI think basil is underrated.");

然后我们将 `await file.Write(data)`,它将把数据写入 thoughts 文件,最后我们将关闭文件。

await file.write(data);
file.close();

这次我们将以所需的权限运行文件

deno --allow-read --allow-write main.ts

如果我们回头查看 `thoughts.txt` 文件,它会显示“I think basil is underrated”。文本已追加到我们的文件中。

读取和追加文件 跳转到标题

还有一些其他选项,所以这次我们回到文件的顶部,而不是使用 `Deno.open`,我们将使用 `Deno.readFile`。这意味着我们可以删除第二个参数对象,因为我们在这里非常明确地说明了我们实际想做什么。然后我们将控制台打印文件。

main.ts
const file = await Deno.readFile("thoughts.txt");
console.log(file);

如果我们使用以下命令运行

deno --allow-read main.ts

编码后的文件将被输出到控制台,这并不是我想要的。我实际上想要可读的文本。所以在这里我可以改用 `Deno.readTextFile` 而不是 `Deno.readFile`,它将直接把文件的文本内容写入控制台。

我们也可以使用 `Deno.writeTextFile` 写入文件。例如

main.ts
await Deno.writeTextFile(
  "thoughts.txt",
  "Fall is a great season",
);

如果我们用 `deno --allow-write main.ts` 运行,它将用关于秋天的字符串覆盖 `thoughts.txt` 文件的内容。

我们可以更新代码以使用 `append: true`

main.ts
await Deno.writeTextFile(
  "thoughts.txt",
  "\nWinter is the most fun season!",
  { append: true },
);

如果再次使用 `deno --allow-write main.ts` 运行,它会将第二句话追加到文件末尾。

探索命令行参数 跳转到标题

我们还可以选择探索命令行参数,所以我们可以这样说

main.ts
const name = Deno.args[0];
console.log(name);

我们可以使用我们常用的 deno 命令运行它,但这次传入一个命令行参数,例如 `Eve`

deno main.ts Eve

名字 `Eve` 将被输出到控制台。

如果想更高级一点,我们可以更新输出的模板字符串来传递一条消息

main.ts
const name = Deno.args[0];
console.log(`How are you today, ${name}?`);

使用环境变量 跳转到标题

在 Deno 的全局对象上,我们也有环境变量。让我们创建一个名为 `home` 的变量,并将我们的主目录输出到控制台

main.ts
const home = Deno.env.get("HOME");
console.log(`Home directory: ${home}`);

当使用 `deno main.ts` 运行时,Deno 将请求环境变量访问权限,我们可以用 `y` 允许。或者我们可以使用 `--allow-env` 标志运行命令,然后我们的主目录将被输出到控制台。

设置一个简单的 HTTP 服务器 跳转到标题

最后,让我们看看我们可靠的 `server` 构造函数。我们可以创建一个返回响应的处理程序,然后将该处理程序传递给 `Deno.serve` 方法。

main.ts
function handler(): Response {
  return new Response("It's happening!");
}

Deno.serve(handler);

当使用以下命令运行时

deno --allow-net main.ts

我们将看到一个服务器正在运行并监听 8000 端口。我们可以在浏览器中访问 `localhost:8000`,应该会看到文本“It's happening!”。

因此,有大量这样的功能可以利用,但很高兴知道我们不必为所有事情都包含外部库,Deno 在错误管理、服务器处理和文件系统操作方面都为我们提供了支持。

示例页面和我们的YouTube 频道上查找更多视频。

您找到所需内容了吗?

隐私政策