Spec-Zone.ru › Deno 2

Напишите файловый сервер

Файловый сервер прослушивает входящие HTTP-запросы и предоставляет файлы из локальной файловой системы. Этот учебник демонстрирует, как создать простой файловый сервер с использованием встроенных API файловой системы Deno file system APIs.

Написание простого файлового сервера

Для начала создайте новый файл с именем file-server.ts.

Мы будем использовать встроенный HTTP-сервер Deno HTTP server для прослушивания входящих запросов. В вашем новом файле file-server.ts добавьте следующий код:

file-server.ts
Deno.serve(
  { hostname: "localhost", port: 8080 },
  (request) => {
    const url = new URL(request.url);
    const filepath = decodeURIComponent(url.pathname);
  },
);

Если вы не знакомы с объектом URL, вы можете узнать больше о нём в документации URL API. Функция decodeURIComponent используется для декодирования закодированного по URL пути, в случае если символы были закодированы в процентах.

Открытие файла и потоковая передача его содержимого

При получении запроса мы попытаемся открыть файл, указанный в URL запроса, с помощью Deno.open.

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

Если файл не существует, мы вернём ответ "404 Not Found".

В теле обработчика запроса, ниже двух переменных, добавьте следующий код:

try {
  const file = await Deno.open("." + filepath, { read: true });
  return new Response(file.readable);
} catch {
  return new Response("404 Not Found", { status: 404 });
}

Запуск файлового сервера

Запустите ваш новый файловый сервер с помощью команды deno run, разрешая доступ для чтения и сетевой доступ:

deno run --allow-read=. --allow-net file-server.ts

Использование файлового сервера из стандартной библиотеки Deno

Написание файлового сервера с нуля — хорошее упражнение для понимания работы HTTP-сервера Deno. Однако написание готового к использованию файлового сервера с нуля может быть сложным и подверженным ошибкам. Лучше использовать проверенное и надёжное решение.

Стандартная библиотека Deno предоставляет вам файловый сервер, чтобы вам не приходилось писать свой собственный.

Для его использования сначала установите удалённый скрипт в вашей локальной файловой системе:

# Deno 1.x
deno install --allow-net --allow-read jsr:@std/http@1/file-server
# Deno 2.x
deno install --global --allow-net --allow-read jsr:@std/http@1/file-server

Это установит скрипт в директорию bin корневой установки Deno, например /home/user/.deno/bin/file-server.

Теперь вы можете запустить скрипт с упрощённым именем:

$ file-server .
Listening on:
- Local: http://0.0.0.0:8000

Чтобы увидеть полный список доступных параметров с файловым сервером, выполните file-server --help.

Если вы посетите http://0.0.0.0:8000/ в своём веб-браузере, вы увидите содержимое вашей локальной директории.

Использование файлового сервера @std/http в проекте Deno

Чтобы использовать файловый сервер в проекте Deno, вы можете добавить его в свой файл deno.json с помощью:

deno add jsr:@std/http

А затем импортировать его в свой проект:

file-server.ts
import { serveDir } from "@std/http/file-server";

Deno.serve((req) => {
  const pathname = new URL(req.url).pathname;
  if (pathname.startsWith("/static")) {
    return serveDir(req, {
      fsRoot: "path/to/static/files/dir",
    });
  }
  return new Response();
});

Этот код настроит HTTP-сервер с Deno.serve. Когда приходит запрос, он проверяет, начинается ли запрашиваемый путь с «/static». Если да, он обслуживает файлы из указанной директории. В противном случае он отвечает пустым ответом.

🦕 Теперь вы знаете, как написать свой собственный простой файловый сервер и как использовать утилиту file-server, предоставляемую стандартной библиотекой Deno. Вы готовы решать множество задач — будь то предоставление статических файлов, обработка загрузок, преобразование данных или управление доступом — вы готовы обслуживать файлы с помощью Deno.

© 2018–2024 the Deno authors
Licensed under the MIT License.
https://docs.deno.com/runtime/tutorials/file_server

Spec-Zone.ru

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