Spec-Zone.ru › Deno 2

Получение и потоковая передача данных

Deno предоставляет несколько знакомых веб-API для серверной среды. Если вы работали с браузерами, вам может быть знаком метод fetch() и API streams, которые используются для выполнения сетевых запросов и доступа к потокам данных по сети. Deno реализует эти API, позволяя вам получать и передавать данные из сети.

Получение данных

При разработке веб-приложения разработчикам часто необходимо извлекать ресурсы из других мест в веб. Мы можем сделать это с помощью API fetch. Мы рассмотрим, как получить данные различных типов из URL и как обработать ошибку, если запрос не удался.

Создайте новый файл под названием fetch.js и добавьте следующий код:

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 для отправки потока байтов файла на сервер.

stream.js
// 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

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API