Skip to main content
Deno 2 is finally here 🎉️
Learn more
class Application
extends EventTarget
Re-export
import { Application } from "https://deno.land/x/ptero@3.0/Ptero/deps.ts";

A class which registers middleware (via .use()) and then processes inbound requests against that middleware (via .listen()).

The context.state can be typed via passing a generic argument when constructing an instance of Application.

Constructors

new
Application(options?: ApplicationOptions<AS>)

Type Parameters

optional
AS extends State = Record<string, any>

Properties

handle

Handle an individual server request, returning the server response. This is similar to .listen(), but opening the connection and retrieving requests are not the responsibility of the application. If the generated context gets set to not to respond, then the method resolves with undefined, otherwise it resolves with a request that is compatible with std/http/server.

keys: KeyStack | Key[] | undefined

A set of keys, or an instance of KeyStack which will be used to sign cookies read and set by the application to avoid tampering with the cookies.

proxy: boolean

If true, proxy headers will be trusted when processing requests. This defaults to false.

state: AS

Generic state of the application, which can be specified by passing the generic argument when constructing:

  const app = new Application<{ foo: string }>();

Or can be contextually inferred based on setting an initial state object:

  const app = new Application({ state: { foo: "bar" } });

When a new context is created, the application's state is cloned and the state is unique to that request/response. Changes can be made to the application state that will be shared with all contexts.

Methods

addEventListener<S extends AS>(
type: "error",
listener: ApplicationErrorEventListenerOrEventListenerObject<S, AS> | null,
options?: boolean | AddEventListenerOptions,
): void

Add an event listener for an "error" event which occurs when an un-caught error occurs when processing the middleware or during processing of the response.

addEventListener(
type: "listen",
listener: ApplicationListenEventListenerOrEventListenerObject | null,
options?: boolean | AddEventListenerOptions,
): void

Add an event listener for a "listen" event which occurs when the server has successfully opened but before any requests start being processed.

deprecated
fetchEventHandler(unnamed 0?: FetchEventHandlerOptions): FetchEventListenerObject

DEPRECATED

Deno Deploy now supports request events like the Deno CLI. Users should use app.listen() just like if they were running on the Deno CLI for Deploy apps. This method will be removed in future versions of oak.

listen(addr: string): Promise<void>

Start listening for requests, processing registered middleware on each request. If the options .secure is undefined or false, the listening will be over HTTP. If the options .secure property is true, a .certFile and a .keyFile property need to be supplied and requests will be processed over HTTPS.

listen(options: ListenOptions): Promise<void>

Start listening for requests, processing registered middleware on each request. If the options .secure is undefined or false, the listening will be over HTTP. If the options .secure property is true, a .certFile and a .keyFile property need to be supplied and requests will be processed over HTTPS.

use<S extends State = AS>(middleware: Middleware<S, Context<S, AS>>, ...middlewares: Middleware<S, Context<S, AS>>[]): Application<S extends AS ? S : (S & AS)>

Register middleware to be used with the application. Middleware will be processed in the order it is added, but middleware can control the flow of execution via the use of the next() function that the middleware function will be called with. The context object provides information about the current state of the application.

Basic usage:

const import { Application } from "https://deno.land/x/oak/mod.ts";

const app = new Application();

app.use((ctx, next) => {
  ctx.request; // contains request information
  ctx.response; // setups up information to use in the response;
  await next(); // manages the flow control of the middleware execution
});

await app.listen({ port: 80 });
[Symbol.for("Deno.customInspect")](inspect: (value: unknown) => string)