Skip to main content
Deno.serve - Deno documentation
function Deno.serve
serve(handler: ServeHandler<Deno.NetAddr>): HttpServer<Deno.NetAddr>
Serves HTTP requests with the given handler. The below example serves with the port `8000` on hostname `"127.0.0.1"`. ```ts Deno.serve((_req) => new Response("Hello, world")); ```

Parameters

Return Type

serve(): HttpServer<Deno.UnixAddr>
Serves HTTP requests with the given option bag and handler. You can specify the socket path with `path` option. ```ts Deno.serve( { path: "path/to/socket" }, (_req) => new Response("Hello, world") ); ``` You can stop the server with an `AbortSignal`. The abort signal needs to be passed as the `signal` option in the options bag. The server aborts when the abort signal is aborted. To wait for the server to close, await the promise returned from the `Deno.serve` API. ```ts 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(); ``` By default `Deno.serve` prints the message `Listening on path/to/socket` on listening. If you like to change this behavior, you can specify a custom `onListen` callback. ```ts 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")); ```

Parameters

Return Type

serve(): HttpServer<Deno.NetAddr>
Serves HTTP requests with the given option bag and handler. You can specify an object with a port and hostname option, which is the address to listen on. The default is port `8000` on hostname `"0.0.0.0"`. You can change the address to listen on using the `hostname` and `port` options. The below example serves on port `3000` and hostname `"127.0.0.1"`. ```ts Deno.serve( { port: 3000, hostname: "127.0.0.1" }, (_req) => new Response("Hello, world") ); ``` You can stop the server with an `AbortSignal`. The abort signal needs to be passed as the `signal` option in the options bag. The server aborts when the abort signal is aborted. To wait for the server to close, await the promise returned from the `Deno.serve` API. ```ts 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(); ``` By default `Deno.serve` prints the message `Listening on http://:/` on listening. If you like to change this behavior, you can specify a custom `onListen` callback. ```ts Deno.serve({ onListen({ port, hostname }) { console.log(`Server started at http://${hostname}:${port}`); // ... more info specific to your server .. }, }, (_req) => new Response("Hello, world")); ``` To enable TLS you must specify the `key` and `cert` options. ```ts 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")); ```

Parameters

Return Type

serve(options: ServeUnixOptions & ServeInit<Deno.UnixAddr>): HttpServer<Deno.UnixAddr>
Serves HTTP requests with the given option bag. You can specify an object with the path option, which is the unix domain socket to listen on. ```ts 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(); ```

Parameters

Return Type

serve(options: (ServeTcpOptions | (ServeTcpOptions & TlsCertifiedKeyPem)) & ServeInit<Deno.NetAddr>): HttpServer<Deno.NetAddr>
Serves HTTP requests with the given option bag. You can specify an object with a port and hostname option, which is the address to listen on. The default is port `8000` on hostname `"0.0.0.0"`. ```ts 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(); ```

Parameters

Return Type