Получение и потоковая передача данных
Deno предоставляет несколько знакомых веб-API для серверной среды. Если вы работали с браузерами, вам может быть знаком метод fetch() и API streams, которые используются для выполнения сетевых запросов и доступа к потокам данных по сети. Deno реализует эти API, позволяя вам получать и передавать данные из сети.
Получение данных
При разработке веб-приложения разработчикам часто необходимо извлекать ресурсы из других мест в веб. Мы можем сделать это с помощью API fetch. Мы рассмотрим, как получить данные различных типов из URL и как обработать ошибку, если запрос не удался.
Создайте новый файл под названием fetch.js и добавьте следующий код:
// Output: JSON Data
const jsonResponse = await fetch("https://api.github.com/users/denoland");
const jsonData = await jsonResponse.json();
console.log(jsonData, "\n");
// Output: HTML Data
const textResponse = await fetch("https://deno.land/");
const textData = await textResponse.text();
console.log(textData, "\n");
// Output: Error Message
try {
await fetch("https://does.not.exist/");
} catch (error) {
console.log(error);
}
Вы можете запустить этот код с помощью команды deno run. Поскольку происходит запрос данных по сети, вам необходимо предоставить разрешение --allow-net.
deno run --allow-net fetch.js
Вы должны увидеть JSON-данные, HTML-данные в виде текста и сообщение об ошибке в консоли.
Потоковая передача данных
Иногда вам может потребоваться отправлять или получать большие файлы по сети. Когда размер файла заранее неизвестен, потоковая передача — более эффективный способ обработки данных. Клиент может читать из потока, пока не получит сообщение о завершении.
Deno предоставляет способ потоковой передачи данных с помощью Streams API. Мы рассмотрим, как преобразовать файл в потоковый объект для чтения или записи, а также как отправлять и получать файлы с помощью потоков.
Создайте новый файл под названием stream.js.
Мы будем использовать API fetch для получения файла. Затем мы воспользуемся методом Deno.open для создания и открытия файла для записи и методом pipeTo из API потоков для отправки потока байтов в созданный файл.
Далее, мы воспользуемся свойством readable запроса POST для отправки потока байтов файла на сервер.
// 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,
});
Вы можете запустить этот код с помощью команды deno run. Поскольку происходит запрос данных по сети и запись в файл, вам необходимо предоставить разрешения --allow-net, --allow-write и --allow-read.
deno run --allow-read --allow-write --allow-net stream.js
Вы должны увидеть созданный и заполненный файл logo.svg в текущем каталоге. Если вы являетесь владельцем example.com, вы увидите, что файл отправляется на сервер.
🦕 Теперь вы знаете, как получать и передавать данные по сети и как передавать данные в файлы и из них! Независимо от того, обслуживаете ли вы статические файлы, обрабатываете ли загрузки, генерируете динамическое содержимое или передаете большие наборы данных, возможности обработки файлов и потоковой передачи данных Deno — это отличные инструменты для вашего арсенала разработчика!
© 2018–2024 the Deno authors
Licensed under the MIT License.
https://docs.deno.com/runtime/tutorials/fetch_data