Skip to content

Latest commit

 

History

History
82 lines (65 loc) · 2.42 KB

fetch_data.md

File metadata and controls

82 lines (65 loc) · 2.42 KB

获取数据

概念

  • 和浏览器一样,Deno 实现了 web 标准 API,如 fetch
  • Deno 默认安全,需要显式授权才能访问网络。
  • 也可以查看:Deno 的 permissions 模型。

概述

在构建任何类型的 web 应用程序时,开发人员通常需要从 web 上的其他地方检索数据。这在 Deno 中和在任何其他 JavaScript 应用程序中一样工作,只需调用 fetch() 方法即可。有关 fetch 的更多信息,请阅读 MDN 文档

Deno 的异常发生在运行一个通过 web 进行调用的脚本时。Deno 默认安全,这意味着 IO(输入/输出)的访问是被禁止的。要通过 web 进行调用,必须明确告诉 Deno 允许这样做。这可以通过在 deno run 命令中加入 --allow-net 标志来实现。

示例

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

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

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

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

文件和流

就像在浏览器中一样,发送和接收大文件是可能的,这要归功于 Streams APIDeno.FsFile API 提供了两个属性:readablewritable,可以用来将 Deno 文件转换为可写或可读流。

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

/**
 * 接收文件
 */
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,
});