cowboy_router(3)

Name

cowboy_router - Router middleware

Description

The cowboy_router middleware maps the requested host and path to the handler to be used for processing the request.

The router takes the dispatch rules as input from the middleware environment. Dispatch rules are generated by calling the cowboy_router:compile(3) function. The environment can contain the rules directly or a tuple {persistent_term, Key}, in which case Cowboy will call persistent_term:get(Key) to retrieve the dispatch rules.

When a route matches, the router sets the handler and handler_opts middleware environment values containing the handler module and initial state, respectively.

The router will stop execution when no route matches. It will send a 400 response if no host was found, and a 404 response otherwise.

Exports

Types

bindings()

bindings() :: #{atom() => any()}

Bindings found during routing.

dispatch_rules()

Opaque type containing the compiled routes.

routes()

routes() = [
    {Host, PathList} |
    {Host, Fields, PathList}
]

PathList :: [
    {Path, Handler, InitialState} |
    {Path, Fields, Handler, InitialState}
]

Host         :: '_' | iodata()
Path         :: '_' | iodata()
Fields       :: cowboy:fields()
Handler      :: module()
InitialState :: any()

Human readable list of routes to handlers.

Cowboy uses this list to map hosts and paths, optionally augmented with constraints applied to the bindings, to handler modules.

The syntax for routes is currently defined in the user guide.

tokens()

tokens() :: [binary()]

List of host_info and path_info tokens that were found using the ... syntax.

See also

cowboy(7), cowboy_req:binding(3), cowboy_req:bindings(3), cowboy_req:host_info(3), cowboy_req:path_info(3)

Cowboy 2.8 Function Reference

Navigation

Version select

Like my work? Donate!

Donate to Loïc Hoguin because his work on Cowboy, Ranch, Gun and Erlang.mk is fantastic:

Recurring payment options are also available via GitHub Sponsors. These funds are used to cover the recurring expenses like food, dedicated servers or domain names.