Напишите файловый сервер
Файловый сервер прослушивает входящие HTTP-запросы и предоставляет файлы из локальной файловой системы. Этот учебник демонстрирует, как создать простой файловый сервер с использованием встроенных API файловой системы Deno file system APIs.
Написание простого файлового сервера
Для начала создайте новый файл с именем file-server.ts.
Мы будем использовать встроенный HTTP-сервер Deno HTTP server для прослушивания входящих запросов. В вашем новом файле 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
А затем импортировать его в свой проект:
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