跳至主要内容

获取数据

概念

  • 与浏览器类似,Deno 实现了 Web 标准 API,例如 fetch
  • Deno 默认情况下是安全的,这意味着必须明确授予访问网络的权限。
  • 另请参阅:Deno 的 权限 模型。

概述

在构建 Web 应用程序时,开发人员通常需要从 Web 上的某个其他位置检索数据。这在 Deno 中与任何其他 JavaScript 应用程序中的工作方式相同,使用 fetch() 方法。有关更多信息,请阅读 MDN 上关于 fetch 的文档

当运行执行网络请求的脚本时,Deno 与其他运行环境的区别就体现出来了。Deno 在设计上就注重安全性,这意味着默认情况下禁止访问 IO(输入/输出)。为了执行网络请求,必须明确告知 Deno 允许这样做。这可以通过在 `deno run` 命令中添加 `--allow-net` 标志来实现。

示例

命令: deno run --allow-net fetch.ts

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

console.log(jsonData);

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

console.log(textData);

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

文件和流

与浏览器类似,借助 Streams API,可以发送和接收大型文件。 Deno.FsFile API 提供了两个属性:readablewritable,它们可以用于将 Deno 文件转换为可写或可读流。

命令: deno run --allow-read --allow-write --allow-net fetch_file.ts

/**
* 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,
});