获取数据
概念
概述
在构建 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 提供了两个属性:readable
和 writable
,它们可以用于将 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,
});