HTTP-сервер
Обработка HTTP-запросов, отправка ответов и управление поведением сервера.
Например, Deno.serveHttp, Deno.serve
функция Deno.serve
Перегрузка 1
serve(handler: ServeHandler<Deno.NetAddr>): HttpServer<Deno.NetAddr>Обрабатывает HTTP-запросы с помощью указанного обработчика.
В приведённом ниже примере сервер запускается на порту 8000 и имени узла "127.0.0.1".
Deno.serve((_req) => new Response("Hello, world"));
Параметры
handler: ServeHandler<Deno.NetAddr> Тип возвращаемого значения
Перегрузка 2
serve(
options: ServeUnixOptions,
handler: ServeHandler<Deno.UnixAddr>,
): HttpServer<Deno.UnixAddr>Обрабатывает HTTP-запросы с помощью указанного набора параметров и обработчика.
Путь к сокету можно указать с помощью параметра path.
Deno.serve(
{ path: "path/to/socket" },
(_req) => new Response("Hello, world")
);
Сервер можно остановить с помощью AbortSignal. Сигнал отмены необходимо передать в наборе параметров в параметре signal. Сервер останавливается при отмене сигнала. Чтобы дождаться закрытия сервера, дождитесь выполнения промиса, возвращаемого API Deno.serve.
const ac = new AbortController();
const server = Deno.serve(
{ signal: ac.signal, path: "path/to/socket" },
(_req) => new Response("Hello, world")
);
server.finished.then(() => console.log("Server closed"));
console.log("Closing server...");
ac.abort();
По умолчанию Deno.serve выводит при запуске на прослушивание сообщение Listening on path/to/socket. Чтобы изменить это поведение, можно указать пользовательский callback onListen.
Deno.serve({
onListen({ path }) {
console.log(`Server started at ${path}`);
// ... more info specific to your server ..
},
path: "path/to/socket",
}, (_req) => new Response("Hello, world"));
Параметры
options: ServeUnixOptions handler: ServeHandler<Deno.UnixAddr> Тип возвращаемого значения
Перегрузка 3
serve(
options: ServeVsockOptions,
handler: ServeHandler<Deno.VsockAddr>,
): HttpServer<Deno.VsockAddr>Обрабатывает HTTP-запросы с помощью указанного набора параметров и обработчика.
Параметры
options: ServeVsockOptions handler: ServeHandler<Deno.VsockAddr> Тип возвращаемого значения
Перегрузка 4
serve(
options: ServeTcpOptions | (ServeTcpOptions & TlsCertifiedKeyPem),
handler: ServeHandler<Deno.NetAddr>,
): HttpServer<Deno.NetAddr>Обрабатывает HTTP-запросы с помощью указанного набора параметров и обработчика.
Можно указать объект с параметрами порта и имени узла — адресом, на котором сервер будет прослушивать подключения. По умолчанию используется порт 8000 и имя узла "0.0.0.0".
Адрес прослушивания можно изменить с помощью параметров hostname и port. В приведённом ниже примере сервер запускается на порту 3000 и имени узла "127.0.0.1".
Deno.serve(
{ port: 3000, hostname: "127.0.0.1" },
(_req) => new Response("Hello, world")
);
Сервер можно остановить с помощью AbortSignal. Сигнал отмены необходимо передать в наборе параметров в параметре signal. Сервер останавливается при отмене сигнала. Чтобы дождаться закрытия сервера, дождитесь выполнения промиса, возвращаемого API Deno.serve.
const ac = new AbortController();
const server = Deno.serve(
{ signal: ac.signal },
(_req) => new Response("Hello, world")
);
server.finished.then(() => console.log("Server closed"));
console.log("Closing server...");
ac.abort();
По умолчанию Deno.serve выводит при запуске на прослушивание сообщение Listening on http://<hostname>:<port>/. Чтобы изменить это поведение, можно указать пользовательский callback onListen.
Deno.serve({
onListen({ port, hostname }) {
console.log(`Server started at http://${hostname}:${port}`);
// ... more info specific to your server ..
},
}, (_req) => new Response("Hello, world"));
Чтобы включить TLS, необходимо указать параметры key и cert.
const cert = "-----BEGIN CERTIFICATE-----\n...\n-----END CERTIFICATE-----\n";
const key = "-----BEGIN PRIVATE KEY-----\n...\n-----END PRIVATE KEY-----\n";
Deno.serve({ cert, key }, (_req) => new Response("Hello, world"));
Параметры
options: ServeTcpOptions | (ServeTcpOptions & TlsCertifiedKeyPem) handler: ServeHandler<Deno.NetAddr> Тип возвращаемого значения
Перегрузка 5
serve(options: ServeUnixOptions & ServeInit<Deno.UnixAddr>): HttpServer<Deno.UnixAddr>Обрабатывает HTTP-запросы с помощью указанного набора параметров.
Можно указать объект с параметром пути, который задаёт путь к доменному сокету Unix для прослушивания подключений.
const ac = new AbortController();
const server = Deno.serve({
path: "path/to/socket",
handler: (_req) => new Response("Hello, world"),
signal: ac.signal,
onListen({ path }) {
console.log(`Server started at ${path}`);
},
});
server.finished.then(() => console.log("Server closed"));
console.log("Closing server...");
ac.abort();
Параметры
options: ServeUnixOptions & ServeInit<Deno.UnixAddr> Тип возвращаемого значения
Перегрузка 6
serve(options: ServeVsockOptions & ServeInit<Deno.VsockAddr>): HttpServer<Deno.VsockAddr>Обрабатывает HTTP-запросы с помощью указанного набора параметров.
Семейство адресов VSOCK обеспечивает связь между виртуальными машинами и хостом, на котором они работают: https://man7.org/linux/man-pages/man7/vsock.7.html
Параметры
options: ServeVsockOptions & ServeInit<Deno.VsockAddr> Тип возвращаемого значения
Перегрузка 7
serve(options: (ServeTcpOptions | (ServeTcpOptions & TlsCertifiedKeyPem)) & ServeInit<Deno.NetAddr>): HttpServer<Deno.NetAddr>Обрабатывает HTTP-запросы с помощью указанного набора параметров.
Можно указать объект с параметрами порта и имени узла — адресом, на котором сервер будет прослушивать подключения. По умолчанию используется порт 8000 и имя узла "0.0.0.0".
const ac = new AbortController();
const server = Deno.serve({
port: 3000,
hostname: "127.0.0.1",
handler: (_req) => new Response("Hello, world"),
signal: ac.signal,
onListen({ port, hostname }) {
console.log(`Server started at http://${hostname}:${port}`);
},
});
server.finished.then(() => console.log("Server closed"));
console.log("Closing server...");
ac.abort();
Параметры
options: (ServeTcpOptions | (ServeTcpOptions & TlsCertifiedKeyPem)) & ServeInit<Deno.NetAddr> Тип возвращаемого значения
интерфейс Deno.HttpServer
Экземпляр сервера, созданный с помощью API Deno.serve().
Параметры типа
Свойства
finished: Promise<void> Промис, который выполняется после завершения работы сервера, например, при отмене с помощью сигнала, переданного в ServeOptions.signal.
Методы
ref(): void Запрещает циклу событий завершаться, пока работает сервер.
Примечание: по умолчанию сервер препятствует завершению цикла событий. Этот метод имеет смысл только после вызова .unref().
unref(): void Позволяет циклу событий завершиться, не дожидаясь завершения работы сервера.
shutdown(): Promise<void> Корректно закрывает сервер. Новые подключения больше не принимаются, а обработка уже принятых запросов завершается.
интерфейс Deno.ServeDefaultExport
Модуль, запускаемый с помощью подкоманды deno serve, должен соответствовать этому интерфейсу.
Чтобы обеспечить корректную проверку типов кода, добавьте satisfies Deno.ServeDefaultExport в export default { ... }, например:
export default {
fetch(req) {
return new Response("Hello world");
}
} satisfies Deno.ServeDefaultExport;
Свойства
Обработчик HTTP-запросов. Принимает запрос и возвращает ответ.
Если обработчик выбрасывает исключение, сервер, вызывающий его, предполагает, что ошибка затрагивает только отдельный запрос. Сервер перехватит ошибку и при необходимости закроет базовое соединение.
интерфейс Deno.ServeHandlerInfo
Дополнительная информация об HTTP-запросе и его соединении.
Параметры типа
Свойства
Удалённый адрес соединения.
completed: Promise<void> Промис, который завершается после полной обработки запроса и отправки ответа.
Он выполняется после того, как ответ (включая его тело) полностью доставлен клиенту. Промис отклоняется с ошибкой Deno.errors.Interrupted, если ответ не удалось отправить — например, когда клиент отключается до полной записи тела ответа. Если необходимо отслеживать такие ошибки, добавьте обработчик .catch() (или оберните await в try/catch).
интерфейс Deno.ServeInit
Параметры типа
Свойства
Обработчик, вызываемый для обработки каждого входящего запроса.
интерфейс Deno.ServeOptions
Параметры, которые можно задать при вызове Deno.serve.
Параметры типа
Свойства
signal: AbortSignal AbortSignal для закрытия сервера и всех соединений.
onError: (error: unknown) => Response | Promise<Response> Обработчик, вызываемый при возникновении ошибки в обработчиках маршрутов.
Callback, вызываемый при запуске сервера на прослушивание.
automaticCompression: boolean = false Автоматически ли сжимать тела ответов, если клиент поддерживает соответствующий формат кодирования, а ответ можно сжать.
интерфейс Deno.ServeTcpOptions
Параметры, которые можно передать в Deno.serve для создания сервера, прослушивающего TCP-порт.
Свойства
transport: "tcp" Используемый транспорт.
port: number = 8000 Порт для прослушивания подключений.
Укажите 0, чтобы прослушивать подключения на любом доступном порту.
hostname: string = "0.0.0.0" IP-адрес в буквальном виде или имя хоста, которое можно преобразовать в IP-адрес.
Примечание о 0.0.0.0 Прослушивание адреса 0.0.0.0 работает на всех платформах, однако браузеры в Windows не работают с адресом 0.0.0.0. Если ваша программа поддерживает Windows, следует показывать сообщение server running on localhost:8080 вместо server running on 0.0.0.0:8080.
reusePort: boolean Устанавливает SO_REUSEPORT в POSIX-системах.
tcpBacklog: number = 511 Максимальное количество ожидающих подключений в очереди прослушивания.
Этот параметр определяет, сколько входящих подключений операционная система может поставить в очередь, пока приложение ожидает их принятия. Если при заполненной очереди поступают новые подключения, они будут отклонены.
Ядро может скорректировать это значение (например, округлить его до ближайшей большей степени двойки плюс 1). В разных операционных системах установлены разные максимальные пределы.
интерфейс Deno.ServeUnixOptions
псевдоним типа Deno.ServeHandler
Обработчик HTTP-запросов. Принимает запрос и возвращает ответ.
Аргумент request — это стандартный Request веб-платформы, а обработчик должен возвращать стандартный Response веб-платформы (или промис, разрешающийся в него). Это те же классы Request и Response, доступные как глобальные объекты в Deno и браузерах, поэтому тело запроса, заголовки, URL и метод можно прочитать из входящего Request.
Если обработчик выбрасывает исключение, сервер, вызывающий его, предполагает, что последствия ошибки ограничены отдельным запросом. Он перехватит ошибку и при необходимости закроет нижележащее соединение.
Параметры типа
Определение
(
request: Request,
info: ServeHandlerInfo<Addr>,
) => Response | Promise<Response>
© 2018–2025 the Deno authors
Licensed under the MIT License.
https://docs.deno.com/api/deno/http-server